Déjame que te explique cómo funcionan las condiciones múltiples en Bash para que puedas crear estructuras if con más de una condición.
Concatenar condiciones en Bash
La sintaxis será la siguiente:
# ESTO ES SOLO UN EJEMPLO. DEBERÁS PONER && o || SEGÚN TUS NECESIDADES if [ condicion1 ] && [ condicion2 ] || . . . && [ condicionN ] then comandos fi
¡IMPORTANTE! -> NO te dejes el espacio después de abrir el corchete y antes de cerrarlo. Si no lo pones, tu código dejará de funcionar.
Vamos a aplicar las condiciones múltiples a un script de Bash que puedas probar. Imaginemos que queremos crear un programa identificacion.sh al que le pasaremos como argumentos un nombre de persona y una edad. Si los parámetros coinciden con nuestro nombre y edad, mostraremos el mensaje «Identificación correcta». Si no, mostraremos el mensaje «identificación incorrecta».
#!/bin/bash # comprovamos que al programa se le pasen dos parametros if [ $# -ne 2 ] then echo "El programa debe recibir 2 parametros" echo "Uso: identificacion.sh <nombre> <edad>" exit 1 fi # miramos si los parámetros pasados coinciden con nuestros datos if [ $1 = Juan ] && [ $2 = 23 ] then echo "Identificacion correcta" else echo "Identificacion incorrecta" fi
*Puedes probar el código en el Online Bash Shell de OnlineGBD*
Ahora que ya sabes cómo poner varias condiciones en Bash, debes saber que, igual que en otros lenguajes, podemos priorizar algunas expresiones lógicas. Te lo explico con el ejemplo anterior.
Imagina que también es una identificación correcta (a parte de Juan de 21 años) la persona que se llame David y tenga 30 años. Ahora deberíamos cambiar nuestro código por uno que evalúe si se le han pasado los parámetros Juan 21 o David 30. Una primera versión podría ser esta:
# Se ha pasado Juan 21 o Se ha pasado David 30 if [ $1 = Juan ] && [ $2 = 23 ] || [ $1 = David ] && [ $2 = 30 ]
Si la has probado, verás que no funciona cómo debería. Esto se debe a que primero siempre se evaluarán las condiciones unidas por || (como en las operaciones aritméticas se multiplica antes que se suma). Para solucionarlo debemos añadir paréntesis a las expresiones lógicas que queremos priorizar.
# Se ha pasado Juan 21 o Se ha pasado David 30 if ([ $1 = Juan ] && [ $2 = 23 ]) || ([ $1 = David ] && [ $2 = 30 ])
Ahora, si ejecutamos el programa de la siguiente forma:
./identificacion.sh David 30
Obtendríamos la siguiente información por la terminal:
Te dejo aquí el código por si también quieres probarlo.
#!/bin/bash # comprovamos que al programa se le pasen dos parametros if [ $# -ne 2 ] then echo "El programa debe recibir 2 parametros" echo "Uso: identificacion.sh <nombre> <edad>" exit 1 fi # Se ha pasado Juan 21 o Se ha pasado David 30 if ([ $1 = Juan ] && [ $2 = 23 ]) || ([ $1 = David ] && [ $2 = 30 ]) then echo "Identificacion correcta" else echo "Identificacion incorrecta" fi