Buenas respuestas y una lección invaluable;) Solo quiero complementar con una nota.
El tipo de prueba que uno elija usar depende en gran medida del código, la estructura, el entorno, etc.
Una alternativa podría ser usar un interruptor o una case
declaración como en:
case "$PHONE_TYPE" in
"NORTEL"|"NEC"|"CISCO")
echo "OK"
;;
*)
echo "Phone type must be nortel,cisco or nec"
;;
esac
Como segunda nota, debe tener cuidado al usar nombres de variables en mayúsculas. Esto es para evitar colisiones entre variables introducidas por el sistema, que casi siempre es todo en mayúsculas. Así en $phone_type
lugar de $PHONE_TYPE
.
Aunque ese es seguro, si tienes la costumbre de usar mayúsculas, algún día podrías decir IFS="boo"
que estás en un mundo de dolor.
También hará que sea más fácil detectar qué es qué.
No es un tienen que pero un aspirante a considerar seriamente la posibilidad.
También es presumiblemente un buen candidato para una función. Esto hace que el código sea más fácil de leer y mantener. P.ej:
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