Cómo usar sentencias Bash If (con 4 ejemplos)
Publicado: 2023-05-08
if
then
fi
. Agregue palabras clave elif
para expresiones condicionales adicionales, o la palabra clave else
para definir una sección de código general que se ejecuta si no se ejecutó ninguna cláusula condicional anterior.Todos los scripts Bash no triviales necesitan tomar decisiones. La declaración if de Bash le permite a su script de Linux hacer preguntas y, dependiendo de la respuesta, ejecutar diferentes secciones de código. Así es como funcionan.
¿Qué es la ejecución condicional?
En todos los scripts de Bash, excepto en los más triviales, generalmente existe la necesidad de que el flujo de ejecución tome un camino diferente a través del script, de acuerdo con el resultado de una decisión. Esto se llama ejecución condicional.
Una forma de decidir qué rama de ejecución tomar es usar una instrucción if
. Es posible que escuche declaraciones if
llamadas declaraciones if then
, o declaraciones if then else
. Son diferentes nombres para la misma cosa.
La declaración if
dice que si algo es verdadero, entonces haz esto . Pero si algo es falso, haz eso en su lugar. El "algo" puede ser muchas cosas, como el valor de una variable, la presencia de un archivo o si dos cadenas coinciden.
La ejecución condicional es vital para cualquier script significativo. Sin él, está muy limitado en lo que puede hacer con su secuencia de comandos. A menos que pueda tomar decisiones significativas, no podrá tomar problemas del mundo real y producir soluciones viables.
La instrucción if
es probablemente el medio más utilizado para obtener la ejecución condicional. Aquí se explica cómo usarlo en scripts de Bash.
RELACIONADO: Cómo verificar si existe un archivo en los scripts Bash de Linux
Un ejemplo simple de declaración If
Esta es la forma canónica de la declaración if
más simple:
si [esta-condición-es-verdadera] entonces ejecutar-estas-sentencias fi
Si la condición dentro del texto se resuelve como verdadera, se ejecutan las líneas de secuencia de comandos en la cláusula then
. Si está mirando guiones escritos por otros, puede ver la declaración if
escrita así:
si [esta-condición-es-verdadera]; entonces ejecutar-estas-sentencias fi
Algunos puntos a tener en cuenta:
- La declaración
if
se concluye escribiendofi
. - Debe haber un espacio después del primer paréntesis ”
[
” y antes del segundo paréntesis ”]
” de la prueba condicional. - Si va a poner la palabra clave
then
en la misma línea que la prueba condicional, asegúrese de usar un punto y coma ”;
” después de la prueba.
Podemos agregar una cláusula else
opcional para que se ejecute algún código si la prueba de condición resulta ser falsa. La cláusula else
no necesita una palabra clave then
.
si [esta-condición-es-verdadera] entonces ejecutar-estas-sentencias demás ejecutar-estas-sentencias-en su lugar fi
Este script muestra un ejemplo simple de una declaración if
que usa una cláusula else
. La prueba condicional verifica si la edad del cliente es mayor o igual a 21 años. Si lo es, el cliente puede ingresar al local y se ejecuta la cláusula then
. Si no tienen la edad suficiente, se ejecuta la cláusula else
y no se les permite entrar.
#!/bin/bash edad_cliente=25 si [ $edad_cliente -ge 21 ] entonces echo "Adelante". demás echo "No puedes entrar". fi
Copie el script de arriba en un editor, guárdelo como un archivo llamado "if-age.sh" y use el comando chmod
para hacerlo ejecutable. Deberá hacer eso con cada uno de los scripts que discutimos.
chmod +x if-edad.sh
Ejecutemos nuestro script.
./si-edad.sh
Ahora editaremos el archivo y usaremos una edad menor a 21.
edad_cliente=18
Realice ese cambio en su secuencia de comandos y guarde sus cambios. Si lo ejecutamos ahora, la condición devuelve falso y se ejecuta la cláusula else.
./si-edad.sh
La cláusula elif
La cláusula elif
agrega pruebas condicionales adicionales. Puede tener tantas cláusulas elif
como desee. Se evalúan sucesivamente hasta que se determina que uno de ellos es verdadero. Si ninguna de las pruebas condicionales elif
resulta ser verdadera, se ejecuta la cláusula else
, si está presente.
Este script solicita un número y luego le dice si es par o impar. El cero es un número par, por lo que no necesitamos probar nada.
Todos los demás números se prueban encontrando el módulo de una división por dos. En nuestro caso, el módulo es la parte fraccionaria del resultado de una división por dos. Si no hay parte fraccionaria, el número es divisible por dos, exactamente. Por lo tanto es un número par.
#!/bin/bash echo -n "Ingrese un número: " leer numero si [ $número -eq 0 ] entonces echo "Usted ingresó cero. El cero es un número par". elif [ $(($número % 2)) -eq 0 ] entonces echo "Usted ingresó $número. Es un número par". demás echo "Usted ingresó $número. Es un número impar". fi
Para ejecutar este script, cópielo en un editor y guárdelo como "if-even.sh", luego use chmod para hacerlo ejecutable.
Ejecutemos el script varias veces y verifiquemos su salida.

./si-incluso.sh
Todo eso está funcionando bien.
Diferentes formas de prueba condicional
Los corchetes " []
" que hemos usado para nuestras pruebas condicionales son una forma abreviada de llamar al programa test
. Por eso, todas las comparaciones y pruebas que admite test
están disponibles para su instrucción if
.
Estos son solo algunos de ellos:
- ! expresión : Verdadero si la expresión es falsa.
- -n cadena : Verdadero si la longitud de la cadena es mayor que cero.
- -z cadena : Verdadero si la longitud de la cadena es cero. Es decir, es una cadena vacía.
- string1 = string2 : Verdadero si string1 es lo mismo que string2.
- string1 != string2 : Verdadero si string1 no es lo mismo que string2.
- integer1 -eq integer2 : Verdadero si integer1 es numéricamente igual a integer2
- integer1 -qt integer2 : Verdadero si integer1 es numéricamente mayor que integer2
- integer1 -lt integer2 : Verdadero si integer1 es numéricamente menor que integer2
- -d directorio : Verdadero si el directorio existe.
- -e archivo : Verdadero si el archivo existe.
- -s archivo : Verdadero si el archivo existe con un tamaño mayor que cero.
- -r archivo : Verdadero si el archivo existe y se establece el permiso de lectura.
- -w archivo : Verdadero si el archivo existe y se establece el permiso de escritura.
- -x archivo : Verdadero si el archivo existe y se establece el permiso de ejecución.
En la tabla, "archivo" y "directorio" pueden incluir rutas de directorio, ya sean relativas o absolutas.
El signo igual “ =
” y la prueba de igualdad -eq
no son lo mismo. El signo igual realiza una comparación de texto carácter por carácter . La prueba de igualdad realiza una comparación numérica .
Podemos ver esto usando el programa test
en la línea de comando.
prueba "esta cadena" = "esta cadena"
prueba "esta cadena" = "esa cadena"
prueba 1 = 001
prueba 1 -eq 001
En cada caso, usamos el comando echo
para imprimir el código de retorno del último comando. Cero significa verdadero, uno significa falso.
Usar el signo igual ” =
” nos da una respuesta falsa comparando 1 con 001. Eso es correcto, porque son dos cadenas de caracteres diferentes. Numéricamente tienen el mismo valor, uno, por lo que el operador -eq
devuelve una respuesta verdadera.
Si desea utilizar la coincidencia de comodines en su prueba condicional, utilice la sintaxis de doble corchete " [[ ]]
".
#!/bin/bash si [[ $USUARIO == *ve ]] entonces echo "Hola $USUARIO" demás echo "$USER no termina en 've'" fi
Este script verifica el nombre de la cuenta del usuario actual. Si termina en “ ve
”, imprime el nombre de usuario. Si no termina en " ve
", el guión te lo dice y termina.
./si-salvaje.sh
RELACIONADO: Pruebas condicionales en Bash: si, entonces, si no, elif
Declaraciones If anidadas
Puede poner una sentencia if
dentro de otra sentencia if
.
Esto es perfectamente aceptable, pero anidar sentencias if
hace que el código sea menos fácil de leer y más difícil de mantener. Si se encuentra anidando más de dos o tres niveles de sentencias if
, probablemente necesite reorganizar la lógica de su script.
Aquí hay un guión que obtiene el día como un número, del uno al siete. Uno es lunes, siete es domingo.
Nos indica el horario de apertura de una tienda. Si es un día laborable o un sábado, informa que la tienda está abierta. Si es domingo, informa que la tienda está cerrada.
Si la tienda está abierta, la instrucción if
anidada realiza una segunda prueba. Si el día es miércoles, nos dice que está abierto solo por la mañana.
#!/bin/bash # obtener el día como un número 1..7 dia=$(fecha +"%u") si [ $día -le 6 ] entonces ## la tienda está abierta si [ $día -eq 3 ] entonces # el miércoles es medio día echo "Los miércoles abrimos solo por la mañana." demás # días regulares de semana y sábado echo "Estamos abiertos todo el día." fi demás # no abre los domingos echo "Es domingo, estamos cerrados". fi
Copie este script en un editor, guárdelo como un archivo llamado "if-shop.sh" y hágalo ejecutable usando el comando chmod
.
Ejecutamos el script una vez y luego cambiamos el reloj de la computadora para que fuera miércoles y volvimos a ejecutar el script. Luego cambiamos el día a domingo y lo ejecutamos una vez más.
./si-tienda.sh
./si-tienda.sh
./si-tienda.sh
RELACIONADO: Cómo usar pruebas condicionales de doble corchete en Linux
El caso de si
La ejecución condicional es lo que da poder a la programación y las secuencias de comandos, y la humilde declaración if
bien podría ser la forma más utilizada de cambiar la ruta de ejecución dentro del código. Pero eso no significa que sea siempre la respuesta.
Escribir un buen código significa saber qué opciones tienes y cuáles son las mejores para usar para resolver un requerimiento en particular. La instrucción if
es genial, pero no dejes que sea la única herramienta en tu bolso. En particular, consulte la declaración case
que puede ser una solución en algunos escenarios.
RELACIONADO: Cómo usar declaraciones de casos en scripts Bash