2017-01-25 9 views
0

ich in meinem Bash-Skript überprüfen möchten, ob eine Variable gleich 1 oder gleich Wert 2.Überprüfen Sie, ob Parameter Wert X oder Y Wert

Ich will nicht zu schätzen, so etwas verwenden, weil die 'if true Statements' die gleichen sind (einige große Echotexte), wenn die Variable gleich 1 oder 2 ist. Ich möchte Datenredundanz vermeiden.

if [ $1 == 1 ] ; then echo number 1 ; else 
if [ $1 == 2 ] ; then echo number 2 ; fi 

Mehr so ​​etwas wie

if [ $1 == 1 OR 2 ] ; then echo number 1 or 2 ; fi 
+0

Neben: '==' ist kein gültiger Vergleichsoperator in '['. Bash erlaubt dies als Erweiterung, aber der [relevante Standard] (http://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html) spezifiziert nur '=' für den Stringvergleich. –

+0

Möglicherweise dupliziert von http://stackoverflow.com/questions/21157435/bash-string-compare-to-multiple-correct-values ​​oder http://stackoverflow.com/questions/22259259/bash-if-statement-to -check-if-string-ist-gleich-zu-mehreren-String-Literalen –

Antwort

2

Da Sie ganzzahlige Werte vergleichen, verwenden Sie die bash Rechenzeichen (()), wie

(($1 == 1 || $1 == 2)) && echo "number 1 or 2" 

Für Handling-Strings mit dem regex Operator in bash

+1

'-o' ist in der aktuellen Version des POSIX-Standards explizit als veraltet markiert. Verwende '[eins] || [ein anderer] '. Und '==' ist eine nicht portierbare Erweiterung; Verwenden Sie '' 'für Zeichenfolgenvergleiche in' [] '. –

+1

(siehe die '[OB] 'Markierungen in http://pubs.opengroup.org/onlinepubs/9699919799/utilities/test.html) –

1

Die wohl einfach zu erweitern Option ist eine case Aussage:

case $1 in 
    [12]) 
     echo "number $1" 
esac 

Das Muster [12] Streichhölzer 1 oder 2. Für größere Bereiche können Sie [1-5] oder kompliziertere Muster wie [1-9]|[1-9][0-9] verwenden, um eine beliebige Zahl von 1 bis 99 zu finden.

Wenn Sie mehrere Fälle haben, sollten Sie jede mit einer ;; trennen.

Verwandte Themen