Traté de verificar si la PHONE_TYPE
variable contiene uno de los tres valores válidos.
if [ "$PHONE_TYPE" != "NORTEL" ] || [ "$PHONE_TYPE" != "NEC" ] ||
[ "$PHONE_TYPE" != "CISCO" ]
then
echo "Phone type must be nortel,cisco or nec"
exit
fi
El código anterior no funcionó para mí, así que intenté esto en su lugar:
if [ "$PHONE_TYPE" == "NORTEL" ] || [ "$PHONE_TYPE" == "NEC" ] ||
[ "$PHONE_TYPE" == "CISCO" ]
then
: # do nothing
else
echo "Phone type must be nortel,cisco or nec"
exit
fi
¿Hay formas más limpias para este tipo de tarea?
shell-script
shell
munish
fuente
fuente
if [[ ! $PHONE_TYPE =~ ^(NORTEL|NEC|CISCO)$ ]]; then
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: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:
fuente
Debe usar AND, no OR.
o
fuente
Para corregir una respuesta anterior (como todavía no puedo comentar):
Tenga en cuenta que necesita al menos bash 4 para este uso de = ~
No funciona en bash 3.
Probé en MS Windows 7 usando bash 4.3.46 (funciona bien) y bash 3.1.17 (no funcionó)
El LHS de = ~ debe estar entre comillas. Arriba, PHONE_TYPE = "SPACE TEL" también coincidiría.
fuente
Use [[en su lugar
fuente
[[
vs[
no ayuda con la lógica desactivada.Solo una propuesta de variación basada en la solución @ 0x80:
fuente