Condiciones múltiples Bash – ¡Te garantizo que tu código funcionará!

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:

terminal de Ubuntu después de ejecutar un programa con nombre identificacion.sh donde se usan condiciones múltiples en bash

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

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Estoy de acuerdo con que el responsable de la web Aprendiz de Programación use los datos proporcionados en este comentario para poder comunicarse de forma efectiva.

Scroll al inicio