Cómo usar la declaración if else en Bash en Linux

27 feb 2021 4 min di lettura
Cómo usar la declaración if else en Bash en Linux
Indice dei contenuti

Introducción

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

En este tutorial, lo guiaremos a través de los conceptos básicos de las if de Bash y le mostraremos cómo usarlas en scripts de shell.

Si declaración

if condicionales pueden tomar diferentes formas. La if toma la siguiente forma:

if TEST-COMMAND
 then
 STATEMENTS
 fi

La if comienza con la if seguida de la expresión condicional y la palabra clave then La declaración termina con la palabra clave fi.

Si TEST-COMMAND se evalúa como True STATEMENTS se ejecuta STATEMENTS. Si TEST-COMMAND devuelve False, no sucede nada, STATEMENTS se ignora.

En general, es una buena idea volver a ingresar el código y separar los bloques de código con líneas en blanco. La mayoría de las personas optan por utilizar una sangría de 4 o 2 espacios. La sangría y las líneas en blanco hacen que su código sea más legible y organizado.

Echemos un vistazo al siguiente script de ejemplo que comprueba si un número determinado es mayor que 10.

#!/bin/bash

 echo -n "Enter a number: "
 read VAR

 if [[ $VAR -gt 10 ]]
 then
 echo "The variable is greater than 10."
 fi

Guarde el código en un archivo y ejecútelo desde la línea de comando:

bash test.sh

El guión le pedirá que ingrese un número. Por ejemplo, si ingresa 15, el comando de test true porque 15 es mayor que 10 y se ejecutará echo dentro de la then

The variable is greater than 10.

Si otra declaración

La if..else tiene la siguiente forma:

if TEST-COMMAND
 then
 STATEMENTS1
 else
 STATEMENTS2
 fi

Si TEST-COMMAND se evalúa como True STATEMENTS1 se ejecutará STATEMENTS1. De lo contrario, si TEST-COMMAND devuelve False, se ejecutará STATEMENTS2 Es posible tener solo una else en la declaración.

else una cláusula else al script de ejemplo anterior:

#!/bin/bash

 echo -n "Enter a number: "
 read VAR

 if [[ $VAR -gt 10 ]]
 then
 echo "The variable is greater than 10."
 else
 echo "The variable is equal or less than 10."
 fi

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

Si elif otra declaración

La if..elif..else Bash if..elif..else tiene la siguiente forma:

if TEST-COMMAND1
 then
 STATEMENTS1
 elif TEST-COMMAND2
 then
 STATEMENTS2
 else
 STATEMENTS3
 fi

Si TEST-COMMAND1 se evalúa como True, se ejecutará STATEMENTS1 Si TEST-COMMAND2 se evalúa como True, se ejecutará STATEMENTS2 Si ninguno de los comandos de prueba se evalúa como True, se ejecuta STATEMENTS3

Es posible tener una o más elif en la declaración. La else es opcional.

Las condiciones se evalúan secuencialmente. Cuando una condición regresa, True, las condiciones restantes no se ejecutan y el control del programa pasa al final de las if.

elif añadir una cláusula elif a la secuencia de comandos anterior:

#!/bin/bash

 echo -n "Enter a number: "
 read VAR

 if [[ $VAR -gt 10 ]]
 then
 echo "The variable is greater than 10."
 elif [[ $VAR -eq 10 ]]
 then
 echo "The variable is equal to 10."
 else
 echo "The variable is less than 10."
 fi

Declaraciones anidadas si

Bash te permite anidar if if dentro de if. Puede poner varias if dentro de otra if.

La siguiente secuencia de comandos le pedirá que ingrese tres números e imprima el mayor de los tres números.

#!/bin/bash

 echo -n "Enter the first number: "
 read VAR1
 echo -n "Enter the second number: "
 read VAR2
 echo -n "Enter the third number: "
 read VAR3

 if [[ $VAR1 -ge $VAR2 ]]
 then
 if [[ $VAR1 -ge $VAR3 ]]
 then
 echo "$VAR1 is the largest number."
 else
 echo "$VAR3 is the largest number."
 fi
 else
 if [[ $VAR2 -ge $VAR3 ]]
 then
 echo "$VAR2 is the largest number."
 else
 echo "$VAR3 is the largest number."
 fi
 fi

Así es como se verá la salida:

Enter the first number: 4
 Enter the second number: 7
 Enter the third number: 2
 7 is the largest number.

En lugar de utilizar if, generalmente es más eficiente utilizar la sentencia case.

Varias condiciones

La lógica de los OR y AND permite utilizar varias condiciones en if.

Aquí hay otra versión del script para imprimir el mayor de los tres números. En esta versión, en lugar de tener if anidadas, usaremos el AND ( && ).

#!/bin/bash

 echo -n "Enter the first number: "
 read VAR1
 echo -n "Enter the second number: "
 read VAR2
 echo -n "Enter the third number: "
 read VAR3

 if [[ $VAR1 -ge $VAR2 ]] && [[ $VAR1 -ge $VAR3 ]]
 then
 echo "$VAR1 is the largest number."
 elif [[ $VAR2 -ge $VAR1 ]] && [[ $VAR2 -ge $VAR3 ]]
 then
 echo "$VAR2 is the largest number."
 else
 echo "$VAR3 is the largest number."
 fi

Operadores de prueba

En Bash, el test utiliza una de las siguientes formas de sintaxis:

test EXPRESSION
 [ EXPRESSION ]
 [[ EXPRESSION ]]

Si desea que su script sea portátil, debería preferir usar el antiguo [ test que está disponible en todos los shells POSIX. La nueva versión actualizada del test [[ (doble paréntesis) 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 NOT ( ! ). Cuando compare cadenas, utilice siempre comillas simples o dobles para evitar la división de palabras o problemas de globulación.

Estos son algunos de los operadores más utilizados:

  • -n VAR: verdadero si la longitud de VAR es mayor que cero.
  • -z VAR: verdadero si el VAR está vacío.
  • STRING1 = STRING2 - Verdadero [STRING1 y STRING2 son iguales.
  • STRING1!= STRING2 - Verdadero STRING1 y STRING2 no son iguales.
  • INTEGER1 -eq INTEGER2 - True INTEGER1 e INTEGER2 son lo mismo.
  • INTEGER1 -gt INTEGER2: verdadero INTEGER1 es mayor que INTEGER2.
  • INTEGER1 -lt INTEGER2: verdadero INTEGER1 es menor que INTEGER2.
  • INTEGER1 -ge INTEGER2: verdadero INTEGER1 es igual o mayor que INTEGER2.
  • INTEGER1 -le INTEGER2: verdadero INTEGER1 es igual o menor que INTEGER2.
  • -h` ARCHIVO`: verdadero si el ARCHIVO existe y es un enlace simbólico.
  • -r` ARCHIVO`: verdadero si el ARCHIVO existe y es legible.
  • -w` FILE`: verdadero si el ARCHIVO existe y se puede escribir.
  • -x` FILE`: verdadero si el FILE existe y es ejecutable.
  • -d` ARCHIVO`: verdadero si el ARCHIVO existe y es un directorio.
  • -e` ARCHIVO`: verdadero si el ARCHIVO existe y es un archivo, independientemente del tipo (nodo, directorio, conector, etc.).
  • -f` ARCHIVO` - Verdadero si el ARCHIVO existe y es un archivo normal (no un directorio o dispositivo).

Conclusión

El if, if..else y if..elif..else le permiten controlar el flujo de ejecución del golpe mediante la evaluación de ciertas condiciones.

Support us with a

Successivamente, completa il checkout per l'accesso completo a Noviello.it.
Bentornato! Accesso eseguito correttamente.
Ti sei abbonato con successo a Noviello.it.
Successo! Il tuo account è completamente attivato, ora hai accesso a tutti i contenuti.
Operazione riuscita. Le tue informazioni di fatturazione sono state aggiornate.
La tua fatturazione non è stata aggiornata.