Buone risposte e una lezione inestimabile;) Voglio solo integrare con una nota.
Quale tipo di test si sceglie di utilizzare dipende fortemente da codice, struttura, ambiente ecc.
Un'alternativa potrebbe essere quella di utilizzare uno switch o case
un'istruzione come in:
case "$PHONE_TYPE" in
"NORTEL"|"NEC"|"CISCO")
echo "OK"
;;
*)
echo "Phone type must be nortel,cisco or nec"
;;
esac
Come seconda nota, dovresti fare attenzione usando i nomi delle variabili maiuscole. Questo per evitare la collisione tra le variabili introdotte dal sistema, che quasi sempre è tutto maiuscolo. Così $phone_type
invece di $PHONE_TYPE
.
Anche se quello è sicuro, se hai l'abitudine di usare tutte le maiuscole, un giorno potresti dire IFS="boo"
e sei in un mondo di dolore.
Sarà anche più facile individuare qual è la cosa.
Non è necessario ma uno prenderebbe in seria considerazione.
Presumibilmente è anche un buon candidato per una funzione. Questo per lo più semplifica la lettura e la manutenzione del codice. Per esempio:
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