Boas respostas e uma lição inestimável;) Só quero suplementar com uma nota.
Que tipo de teste se escolhe usar depende muito do código, estrutura, ambiente etc.
Uma alternativa poderia ser usar uma opção ou case
instrução como em:
case "$PHONE_TYPE" in
"NORTEL"|"NEC"|"CISCO")
echo "OK"
;;
*)
echo "Phone type must be nortel,cisco or nec"
;;
esac
Como segunda observação, você deve ter cuidado usando nomes de variáveis em maiúsculas. Isso evita a colisão entre variáveis introduzidas pelo sistema, que quase sempre são todas maiúsculas. Assim, em $phone_type
vez de $PHONE_TYPE
.
Embora esse seja seguro, se você tem o hábito de usar todas as letras maiúsculas, um dia você pode dizer IFS="boo"
e está em um mundo de mágoa.
Também tornará mais fácil identificar qual é o quê.
Não é preciso, mas um seria fortemente considerar.
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
if [[ ! $PHONE_TYPE =~ ^(NORTEL|NEC|CISCO)$ ]]; then