Ich habe versucht zu überprüfen, ob die PHONE_TYPE
Variable einen von drei gültigen Werten enthält.
if [ "$PHONE_TYPE" != "NORTEL" ] || [ "$PHONE_TYPE" != "NEC" ] ||
[ "$PHONE_TYPE" != "CISCO" ]
then
echo "Phone type must be nortel,cisco or nec"
exit
fi
Der obige Code hat bei mir nicht funktioniert, also habe ich es stattdessen versucht:
if [ "$PHONE_TYPE" == "NORTEL" ] || [ "$PHONE_TYPE" == "NEC" ] ||
[ "$PHONE_TYPE" == "CISCO" ]
then
: # do nothing
else
echo "Phone type must be nortel,cisco or nec"
exit
fi
Gibt es sauberere Wege für diese Art von Aufgabe?
shell-script
shell
münchen
quelle
quelle
if [[ ! $PHONE_TYPE =~ ^(NORTEL|NEC|CISCO)$ ]]; then
Gute Antworten und eine unschätzbare Lektion;) Ich möchte nur mit einer Notiz ergänzen.
Welche Art von Test man wählt, hängt stark von Code, Struktur, Umgebung usw. ab.
Eine Alternative könnte sein, einen Schalter oder eine
case
Anweisung wie folgt zu verwenden:Als zweite Anmerkung sollten Sie vorsichtig sein, wenn Sie Variablennamen in Großbuchstaben verwenden. Dies dient dazu, eine Kollision zwischen vom System eingegebenen Variablen zu verhindern, bei der es sich fast immer um Großbuchstaben handelt. Also
$phone_type
statt$PHONE_TYPE
.Auch wenn dieser sicher ist, wenn Sie es sich zur Gewohnheit gemacht haben, Großbuchstaben zu verwenden, könnten
IFS="boo"
Sie eines Tages sagen, dass Sie sich in einer Welt voller Verletzungen befinden.Es macht es auch einfacher zu erkennen, was was ist.
Nicht ein muss, sondern ein würde stark überlegen.
Es ist vermutlich auch ein guter Kandidat für eine Funktion. Dadurch ist der Code meist einfacher zu lesen und zu warten. Z.B:
quelle
Sie sollten ANDs verwenden, nicht ORs.
oder
quelle
So korrigieren Sie eine der obigen Antworten (da ich noch keinen Kommentar abgeben kann):
Bitte beachten Sie, dass Sie mindestens Bash 4 für diese Verwendung von = ~ benötigen.
In Bash 3 funktioniert dies nicht.
Ich habe unter MS Windows 7 mit bash 4.3.46 (funktioniert einwandfrei) und bash 3.1.17 (hat nicht funktioniert) getestet
Die LHS von = ~ sollte in Anführungszeichen stehen. Oben würde auch PHONE_TYPE = "SPACE TEL" passen.
quelle
Verwenden Sie stattdessen [[
quelle
[[
vs[
hilft nicht, wenn die Logik ausgeschaltet ist.Nur ein Variationsvorschlag basierend auf der @ 0x80-Lösung:
quelle