En la nota anterior utilicé un ejemplo que incorporaba una estructura como la siguiente:
if [ condición ]; then
...
else #En otro caso, si no
...
fi
Esta estructura permite controlar qué serie de instrucciones se ejecutarán, de acuerdo a si se cumplen las condiciones o no.
Ejemplo:
#!/bin/bash
#Condicionales: if-then-else
echo "Adivina mi edad:"
read edad
if [ $edad -eq 30 ]; then
echo "¡Correcto!"
exit 0
else
echo "¡Incorrecto!"
exit 1
fi
Además, como en otros lenguajes de programación, en Bash también se puede anidar tantos if-then-else
como sean necesarios.
Ejemplo:
#!/bin/bash
#Condicionales: if-then-else
echo "Adivina mi edad:"
read edad
if [ $edad -eq 30 ]; then
echo "¡Correcto!"
else
if [ $edad -ge 28 ] && [ $edad -le 33 ]; then
echo "¡Caliente caliente! Casi le atinas"
else
if [ $edad -ge 25 ] && [ $edad -le 35 ]; then
echo "¡Tibio tibio! Te quedaste cerca"
else
echo "¡Frío frío! Te quedaste muy lejos"
fi
fi
fi

Nótese que cuando se necesita realizar más de una comparación, cada una va encerrada por corchetes independientes:
if [ condición ] operador lógico [ condición ]; then
Otra forma de hacerlo es utilizando la instrucción elif
que sirve para indicar “si la condición no se cumplió, verifica esta otra”. Esta es una forma más limpia y clara, por lo que considero que es la mejor opción.
#!/bin/bash
#Condicionales: if-then-else
echo "Adivina mi edad:"
read edad
if [ $edad -eq 30 ]; then
echo "¡Correcto!"
elif [ $edad -ge 28 ] && [ $edad -le 33 ]; then
echo "¡Caliente caliente! Casi le atinas"
elif [ $edad -ge 25 ] && [ $edad -le 35 ]; then
echo "¡Tibio tibio! Te quedaste cerca"
else
echo "¡Frío frío! Te quedaste muy lejos"
fi

Como se puede ver en las salidas de cada script, las dos formas son correctas, ya que cumplen con el mismo objetivo.
Algunas reglas y convenciones para tomar en cuenta
Corchetes
Los corchetes deben ir separados por un espacio de la condición:
Correcto: [ condición ]
Incorrecto: [condición], [condición ], [ condición]
Operadores de comparación
Cadena
|
Numérico
|
Verdadero si
|
x = y
|
x -eq y
|
x es igual a y
|
x != y
|
x -ne y
|
x no es igual a y
|
x < y
|
x -lt y
|
x menor que y
|
–
|
x -le y
|
x es menor o igual que y
|
x > y
|
x -gt y
|
x es mayor que y
|
–
|
x -ge y
|
x es mayor o igual que y
|
-n x
|
–
|
x no es nulo
|
-z x
|
–
|
x es nulo
|
Operadores de evaluación de archivos
Operador
|
Verdadero si
|
-d archivo
|
archivo existe y es un directorio
|
-e archivo
|
archivo existe
|
-f archivo
|
archivo existe y es un archivo regular
|
-r archivo
|
tiene permiso de lectura en el archivo
|
-s archivo
|
archivo existe y no está vacío
|
-w archivo
|
tiene permiso de escritura en el archivo
|
archivo1 -nt archivo2
|
archivo1 es más reciente que el archivo2
|
archivo1 -ot archivo2
|
archivo1 es mayor que archivo2
|
Operadores lógicos
Operador
|
Verdadero si
|
==
|
las expresiones son verdaderas
|
&&
|
ambas expresiones son verdad, de lo contrario falso
|
||
|
al menos una de las expresiones es verdadera
|
Espero esta información te haya sido de utilidad, en la próxima nota continuaré con el tema Bash: control de flujo (case). Hasta pronto.
Explicación muy clara ,para novatos como yo.
Muchas gracias.
Hola
Gracias por leernos, me alegra que te haya servido.
¡Saludos!
Muchas gracias por el contenido de tu blog. Me ha resuelto algunas dudas de bash
Increible curso, te agradezco el tiempo dedicado, con mucho gusto publicaré tus post, porque se que a muchos les podrá servir.
De nuevo, muchísimas gracias!