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:
case "$PHONE_TYPE" in
"NORTEL"|"NEC"|"CISCO")
echo "OK"
;;
*)
echo "Phone type must be nortel,cisco or nec"
;;
esac
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:
valid_phone_type()
{
case "$1" in
"NORTEL"|"NEC")
return 0;;
*)
echo "Model $1 is not supported"
return 1;;
esac
}
if ! valid_phone_type "$phone_type"; then
echo "Bye."
exit 1
fi
if [[ ! $PHONE_TYPE =~ ^(NORTEL|NEC|CISCO)$ ]]; then