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 caseinstruçã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_typevez 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