
Bash admite declaraciones if-else para que pueda usar el razonamiento lógico en sus scripts de shell.
La sintaxis general de if-else es la siguiente:
if [ expression ]; then
## execute this block if condition is true else go to next
elif [ expression ]; then
## execute this block if condition is true else go to next
else
## if none of the above conditions are true, execute this block
fi
Como te diste cuenta:
elif
Para condiciones de tipo «else if»- if else condición siempre termina con
fi
- uso de punto y coma
;
ythen
Palabras clave
Antes de mostrar ejemplos de if y else-if, permítanme compartir expresiones de comparación comunes (también conocidas como condiciones de prueba).
Condiciónes de la prueba
Los siguientes operadores de condiciones de prueba están disponibles para comparaciones numéricas:
Estado de salud | Equivalente a verdadero cuando |
---|---|
$a -lt $b | $a < $b ($a es IAs tCorea$b) |
$a -gt $b | $a > $b ($a es GRAMOreproductor tCorea$b) |
$a -le $b | $a <= $b ($a es Ias o mies igual a $b) |
$a -ge $b | $a >= $b ($a es GRAMOrepetidor o mies igual a $b) |
$a -eq $b | $a es igual a $b |
$a-ne $b | $a no es igual a $b |
Si está comparando cadenas, puede usar la siguiente condición de prueba:
Estado de salud | Equivalente a verdadero cuando |
---|---|
«$a» = «$b» | $a es lo mismo que $b |
«$a» == «$b» | $a es lo mismo que $b |
«$a»! =»$b» | $a es diferente de $b |
-z «$a» | $a está vacío |
La verificación del tipo de archivo también es condicional:
Estado de salud | Equivalente a verdadero cuando |
---|---|
-f $a | $a es un archivo |
-d $a | $a es un directorio |
-L $a | $a es un enlace |
Ahora que conoce varias expresiones de comparación, veámoslas en acción en varios ejemplos.
usando la sentencia if en bash
Vamos a crear un script que te diga si un número dado es par o no.
Aquí está mi script llamado even.sh
:
#!/bin/bash
read -p "Enter the number: " num
mod=$(($num%2))
if [ $mod -eq 0 ]; then
echo "Number $num is even"
fi
Devuelve cero cuando la operación de módulo (%) se divide exactamente por el número dado (2 en este caso).
🚧
Presta especial atención al espacio. Debe haber un espacio entre los paréntesis de apertura y cierre y la condición. Asimismo, debe haber espacios antes y después de los operadores condicionales (-le, ==, etc.).
Esto es lo que muestra cuando ejecuto el script:
¿Notó que el script le dice cuándo el número es par, pero no muestra nada cuando el número es impar? Mejoremos este script con un else.
Usar sentencia if else
Ahora agregué una declaración else al script anterior. De esta manera, cuando obtenga un módulo distinto de cero (porque los números impares no se pueden dividir por 2), ingresará al bloque else.
#!/bin/bash
read -p "Enter the number: " num
mod=$(($num%2))
if [ $mod -eq 0 ]; then
echo "Number $num is even"
else
echo "Number $num is odd"
fi
Vamos a ejecutarlo de nuevo con los mismos números:

Como puedes ver, este script es mejor porque también te dice si el número es impar o no.
Use la declaración elif (si no)
Aquí hay un script que verifica si un número dado es positivo o negativo. En matemáticas, el 0 no es ni positivo ni negativo. El script también verifica este hecho.
#!/bin/bash
read -p "Enter the number: " num
if [ $num -lt 0 ]; then
echo "Number $num is negative"
elif [ $num -gt 0 ]; then
echo "Number $num is positive"
else
echo "Number $num is zero"
fi
Déjame ejecutarlo para cubrir los tres casos aquí:

Combinar múltiples condiciones usando operadores lógicos
Hasta ahora, todo bien. Pero, ¿sabía que puede incluir múltiples condiciones en una condición usando operadores lógicos como AND (&&), OR (||)? Le permite escribir condiciones complejas.
Escribamos un guión que te diga si un año dado es un año bisiesto.
¿Recuerdas las condiciones para un año bisiesto? Debería ser divisible por 4, pero si es divisible por 100, no es un año bisiesto. Sin embargo, si es divisible por 400, es un año bisiesto.
Aquí está mi guión.
#!/bin/bash
read -p "Enter the year: " year
if [[ ($(($year%4)) -eq 0 && $(($year%100)) != 0) || ($(($year%400)) -eq 0) ]]; then
echo "Year $year is leap year"
else
echo "Year $year is normal year"
fi
💡
Tenga en cuenta el uso de corchetes dobles [[ ]]más que. Esto es obligatorio si usa operadores lógicos.
Verifique el script ejecutándolo con diferentes datos:

🏋️Tiempo de ejercicio
Hagamos un poco de ejercicio 🙂
ejercicio 1: escriba un script de shell bash para comprobar la longitud de una cadena que se le ha dado como argumento. Si no se proporcionan argumentos, imprimirá «cadena vacía».
ejercicio 2: escriba un script de shell para verificar si existe un archivo dado. Puede proporcionar la ruta completa del archivo como argumento o usarla directamente en el script.
pista: use -f para archivos
Ejercicio 3: mejora la secuencia de comandos anterior comprobando si el archivo dado es un archivo, directorio o enlace normal o no existe.
pista: use -f, -d y -L
Ejercicio 3: escriba un script que acepte dos parámetros de cadena. El script debe verificar si la primera cadena contiene el segundo parámetro como una subcadena.
pista: Consulte el capítulo anterior de bash string
Puede discutir su solución en la comunidad:
Serie Bash Fundamentals #7 Ejercicio: Sentencias If Else
Si está siguiendo la serie Bash Basics sobre It’s FOSS, puede enviar y analizar las respuestas a los ejercicios al final de este capítulo: Se alienta a los miembros experimentados a brindar comentarios a los recién llegados. Tenga en cuenta que puede haber más de una respuesta para una pregunta en particular.

Espero que hayas disfrutado de la serie Bash Basics. En el próximo capítulo, aprenderá a usar bucles en Bash. ¡Sigue regañando!