en este tutorial, le guiaremos a través de los conceptos básicos de la instrucción Bash if y le mostraremos cómo usarla en sus scripts de shell.

la toma de decisiones es uno de los conceptos más fundamentales de la programación informática. Al igual que en cualquier otro lenguaje de programación, if, if..else, if..elif..else y las instrucciones anidadas if en Bash se pueden usar para ejecutar código basado en una determinada condición.,

if Statement #

Bash if los condicionales pueden tener diferentes formas. El más básico if instrucción toma la siguiente forma:

if TEST-COMMANDthen STATEMENTSfi

El if instrucción se inicia con la etiqueta if palabra clave seguida de la expresión condicional y el then palabra clave. La instrucción termina con la palabra clave fi.,

Si el TEST-COMMAND evalúa a True, el STATEMENTS ejecutado. Si TEST-COMMAND devuelve False, no pasa nada, el STATEMENTS se ignora.

en general, es una buena práctica sangrar siempre el código y separar los bloques de código con líneas en blanco. La mayoría de las personas optan por usar sangría de 4 o 2 espacios. Las sangrías y las líneas en blanco hacen que su código sea más legible y organizado.,

veamos el siguiente ejemplo de script que comprueba si un número dado es mayor que 10:

#!/bin/bashecho -n "Enter a number: "read VARif ]then echo "The variable is greater than 10."fi

Guardar el código en un archivo y ejecutarlo desde la línea de comandos:

bash test.sh

La secuencia de comandos le pedirá que introduzca un número. Si, por ejemplo, introducir 15, el test comando evaluará a true porque 15 es mayor que 10, y el echo comando dentro de la etiqueta then cláusula será ejecutado.

The variable is greater than 10.

if..,else #

El Bash if..else instrucción toma la siguiente forma:

if TEST-COMMANDthen STATEMENTS1else STATEMENTS2fi

Si el TEST-COMMAND evalúa a True, el STATEMENTS1 será ejecutado. De lo contrario, si TEST-COMMAND devuelve False, el STATEMENTS2 será ejecutado. Solo puede tener una cláusula else en la instrucción.,

agreguemos una cláusulaelse al script de ejemplo anterior:

si ejecuta el código e ingresa un número, el script imprimirá un mensaje diferente basado en si el número es mayor o menor / igual a 10.

si..elif..else #

El Bash if..elif..else instrucción toma la siguiente forma:

if TEST-COMMAND1then STATEMENTS1elif TEST-COMMAND2then STATEMENTS2else STATEMENTS3fi

Si el TEST-COMMAND1 evalúa a True, el STATEMENTS1 será ejecutado., Si el TEST-COMMAND2 evalúa a True, el STATEMENTS2 será ejecutado. Si ninguno de los comandos de prueba evalúa True, se ejecuta STATEMENTS2.

Puede tener una o más cláusulas elif en la declaración. La cláusula else es opcional.

las condiciones se evalúan secuencialmente., Una vez que una condición devuelve True las condiciones restantes no se realizan y el control del programa se mueve al final de las instrucciones if.

vamos a añadir una cláusulaelif al script anterior:

instrucciones If anidadas #

Bash le permite anidarif instrucciones dentro deif instrucciones. Puede colocar varias instrucciones if dentro de otra instrucción if.,

el siguiente script le pedirá que introduzca tres números e imprimirá el número más grande entre los tres números.

así es como se verá la salida:

Enter the first number: 4Enter the second number: 7Enter the third number: 27 is the largest number.
generalmente, es más eficiente usar la instrucción case en lugar de instrucciones anidadas if.

múltiples condiciones #

los operadores lógicos OR y AND le permiten usar múltiples condiciones en las instrucciones if.,

Aquí hay otra versión del script para imprimir el número más grande entre los tres números. En esta versión, en lugar de las instrucciones anidadas if, estamos utilizando el operador lógico AND (&&).

operadores de prueba #

en Bash, el comandotest toma una de las siguientes formas de sintaxis:

test EXPRESSION]

para hacer el script portable, prefiera usar la prueba anterior[ comando que está disponible en todos los shells POSIX., La nueva versión actualizada del comando test [[ (soportes dobles) es compatible con la mayoría de los sistemas modernos que utilizan Bash, Zsh y Ksh como shell predeterminado.

para negar la expresión de prueba, utilice el operador lógico NOT (!). Al comparar cadenas, siempre use comillas simples o dobles para evitar problemas de división de palabras y globbing.,

a Continuación son algunos de los más comúnmente utilizados operadores:

  • -n VAR Verdadero si la longitud de VAR es mayor que cero.
  • -z VAR True si el VAR está vacío.
  • STRING1 = STRING2 True si STRING1 y STRING2 son iguales.
  • STRING1 != STRING2 True si STRING1 y STRING2 no son iguales.,
  • INTEGER1 -eq INTEGER2 – True if INTEGER1 and INTEGER2 are equal.
  • INTEGER1 -gt INTEGER2 – True if INTEGER1 is greater than INTEGER2.
  • INTEGER1 -lt INTEGER2 – True if INTEGER1 is less than INTEGER2.
  • INTEGER1 -ge INTEGER2 – True if INTEGER1 is equal or greater than INTEGER2.
  • INTEGER1 -le INTEGER2 – True if INTEGER1 is equal or less than INTEGER2.,
  • -h FILE – True if the FILE exists and is a symbolic link.
  • -r FILE – True if the FILE exists and is readable.
  • -w FILE – True if the FILE exists and is writable.
  • -x FILE – True if the FILE exists and is executable.,
  • -d FILE True si el FILE existe y es un directorio.
  • -e FILE True si el FILE existe y es un archivo, independientemente de su tipo (nodo, directorio, socket, etc.).
  • -f FILE True si el FILE existe y es un archivo regular (no es un directorio o dispositivo).,

conclusión #

las instruccionesif,if..else yif..elif..else le permiten controlar el flujo de la ejecución del script Bash evaluando las condiciones dadas.