Boas respostas e uma lição inestimável;) Só quero complementar com uma nota.
O tipo de teste que escolhemos usar é altamente dependente de código, estrutura, ambiente etc.
Uma alternativa poderia ser usar um switch ou uma declaração case
como em:
case "$PHONE_TYPE" in
"NORTEL"|"NEC"|"CISCO")
echo "OK"
;;
*)
echo "Phone type must be nortel,cisco or nec"
;;
esac
Como segunda nota, você deve ter cuidado ao usar nomes de variáveis maiúsculas. Isso é para evitar a colisão entre as variáveis introduzidas pelo sistema, que quase sempre é tudo em maiúsculas. Assim $phone_type
em vez de $PHONE_TYPE
.
Embora este seja seguro, se você tem o hábito de usar todas as letras maiúsculas, um dia você pode dizer IFS="boo"
e você está em um mundo de mágoa.
Também será mais fácil identificar qual é o motivo disso.
Não é necessário , mas seria strongmente considerado.
Também é presumivelmente um bom candidato para uma função. Isso torna o código mais fácil de ler e manter. Por exemplo:
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