Condicionales en línea en Bash

Este es uno de los capítulos del tutorial Scripts en Bash. Encontrarás los enlaces a todos los de capítulos, al final de este artículo.

Aunque me gusta ser muy verboso a la hora de escribir código, hay días en los que me levanto justo con el pie cambiado, y me gusta poner en una única línea todo un script. Quizás he exagerado un poco en esto último, pero si que es cierto, que en ocasiones me gusta simplificar, y si en lugar de utilizar cuatro líneas de código puedo utilizar una mejor que mejor. Evidentemente, siempre y cuando el resultado de esa línea de código sea mucho mas aclaratorio, o mejor dicho, mucho mas legible. En ocasiones, por simplificar y tirarlo todo en una línea de código, el efecto que se consigue es justo el contrario, que aquello sea casi un jeroglífico. Una de las mejoras que puedes conseguir a la hora de simplificar, son los condicionales en línea en Bash.

Condicionales en línea en Bash

Condicionales en línea en Bash

Lo mas sencillo

Empecemos por lo mas sencillo, es decir, agrupando todos los elementos que constituyen tu condicional en la misma línea. Así, por ejemplo, un condicional de lo más básico,

if [[ $valor -eq 5 ]]
then
    echo Iguales
fi

Esto mismo lo podrías expresar de la siguiente forma,

if [[ $valor -eq 5 ]]; then echo Iguales; fi

Sin embargo, realizándolo así, tampoco es que ganes mucho, y sinceramente, desde mi personal punto de vista si que pierdes en legibilidad. Mas si cabe, si en la misma línea además añades un else, tal y como te muestro a continuación. Primero, de la manera clásica,

if [[ $valor -eq 5 ]]
then
    echo Iguales
else
    echo Distintos
fi

y a continuación en línea,

if [[ $valor -eq 5 ]]; then echo Iguales; else echo Distintos; fi

Mejorando los condicionales en línea

Como ves esta solución no resulta excesivamente legible. Sin embargo, se puede hacer mejor, y entonces si que ganarás en legibilidad. Esto es tan sencillo como utilizar los operadores && y ||. Esto te va a permitir conseguir los mismos resultados que con lo que has visto hasta el momento, pero de una forma mucho mas simplificada. Así, por ejemplo, el primero de los que hemos visto, se puede mostrar de la siguiente forma,

[[ $valor -eq 5 ]] && echo Iguales

Y si ademá queremos utilizar también el else, quedaría como te muestro a continuación,

[[ $valor -eq 5 ]] && echo Iguales || echo Distintos

Con todo esto no te estoy mostrando nada del otro mundo. Esto seguro que lo has visto en innumerables tutoriales de Ubuntu o de otras distribuciones para instalar alguna aplicación que te dicen algo como,

sudo apt update && sudo apt install <app>

Condicionas la ejecución del segundo de los comandos al resultado del primer comando. Si el resultado del primer comando no es 0, el segundo de los comandos no se ejecutará. De hecho, lo podrías mejorar de la siguiente forma,

sudo apt update && sudo apt install <app> || echo "No se ha podido actualizar"

Condicionales en línea numéricos

Otra interesante opción a la hora de utilizar condicionales en línea, son los condicionales numéricos. Los condicionales numéricos son muy similares, por node decirte que son idénticos a los que puedes encontrar en otros lenguajes de programación como JavaScript. Por ejemplo,

((resultado=valor>5?10:20))

De esta sencilla forma dependiendo del valor que contenga la variable le asignará 10 o 20. Si te fijas, realmente, con este tipo de operadores, si que se simplifica enormemente la operativa, y es realmente muy legible.

Si además quisiseras imprimir el valor resultante, podrías combinarlo con la solución anterior, para sacar algo como,

((resultado = valor>5?10:20)) && echo $resultado

o incluso

((resultado = valor>5?10:20)) ; echo $resultado

El vídeo

Esto mismo te lo muestro en un vídeo para que veas lo práctico que resulta el uso de los condicionales en línea en Bash.

3 comentarios en “Condicionales en línea en Bash

  1. AC
    Acuña Castellón, Gustavo Adolfo hace 2 años

    Buenos dias estimados , quien de ustedes podrian ayudarme con un .bash . que me compare este archivos sms.log el tamaño.

    Por ejemplo :
    1. wc -l SMS.LOG | awk ‘{print $1}’
    resultado : 7169
    2.wc -l SMS.LOG | awk ‘{print $1}’
    Resultado: 7180

    Que me compare los dos resultados si el primer resultado es menor al segundo resultado : que solo indique que el proceso esta corriedo sin problemas y en caso contrario me indique en el logs , que el proceso esta con problemas.

  2. RI
    rivas hace 4 meses

    Muchas gracias, excelente todo este material

  3. AT
    atareao hace 3 meses

    Muchas gracias por tu comentario

Deja una respuesta

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