Cómo usar sentencias Bash If (con 4 ejemplos)

Publicado: 2023-05-08
Computadora portátil Linux que muestra una ventana de terminal con un patrón de globo terráqueo en el fondo y una marca de agua binaria
fatmawati achmad zaenuri/Shutterstock
Utilice la instrucción if de Linux Bash para crear expresiones condicionales con una estructura 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.

9 ejemplos de bucles for en Linux Bash Scripts
RELACIONADO 9 Ejemplos de bucles for en scripts Bash de Linux

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 escribiendo fi .
  • 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 

Usando chmod para hacer un script ejecutable

Ejecutemos nuestro script.

 ./si-edad.sh 

Ejecutar el script if-age.sh con la variable de edad establecida en 25

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 

Ejecutar el script if-age.sh con la variable de edad establecida en 18

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 

Ejecutando el script if-even.sh con varias entradas

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.

Usando el programa de prueba en la línea de comando para probar diferentes comparaciones

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 

Ejecutar el script if-wild.sh que muestra la búsqueda con comodines en la prueba condicional de la instrucción if

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 

Ejecutar el script if-shop.sh con el reloj de la computadora configurado en un día de la semana, luego un miércoles, luego un domingo

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