GNU/Linux >> Tutoriales Linux >  >> Linux

Declaración de Bash if..else

Este tutorial lo guiará a través de los conceptos básicos de Bash if Declaración y mostrarle 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. Como en cualquier otro lenguaje de programación, if , if..else , if..elif..else y if anidado Las declaraciones en Bash se utilizan para ejecutar código en función de una determinada condición.

if Declaración #

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

if TEST-COMMAND
then
  STATEMENTS
fi

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

Si el TEST-COMMAND se evalúa como True , las STATEMENTS se ejecuta Si TEST-COMMAND devuelve False , no pasa nada; las STATEMENTS ser ignorado.

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 eligen usar sangría de 4 espacios o de 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 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 script le pedirá que ingrese un número. Si, por ejemplo, ingresa 15, el test el comando se evaluará como true porque 15 es mayor que 10, y el echo comando dentro del then se ejecutará la cláusula.

The variable is greater than 10.

if..else Declaración #

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

if TEST-COMMAND
then
  STATEMENTS1
else
  STATEMENTS2
fi

Si el TEST-COMMAND se evalúa como True , las STATEMENTS1 será ejecutado. De lo contrario, si TEST-COMMAND devuelve False , las STATEMENTS2 será ejecutado. Solo puedes tener un else cláusula en la declaración.

Agreguemos un else cláusula 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 según si el número es mayor o menor/igual a 10.

if..elif..else Declaración #

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

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

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

Puede tener uno o más elif cláusulas en la declaración. El else la cláusula 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 del if declaraciones.

Agreguemos un elif cláusula al guión 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

Anidado if Declaraciones #

Bash te permite anidar if declaraciones dentro de if declaraciones. Puede colocar múltiples if sentencias dentro de otro if declaración.

El siguiente script le pedirá que ingrese tres números e imprima el número más grande entre 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.
Generalmente, es más eficiente usar el case sentencia en lugar de if anidado declaraciones.

Condiciones Múltiples #

El OR lógico y AND los operadores le permiten usar múltiples condiciones en el if declaraciones.

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 del if anidado declaraciones, estamos usando el lógico AND (&& ) operador.

#!/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, la test El comando toma una de las siguientes formas de sintaxis:

test EXPRESSION
[ EXPRESSION ]
[[ EXPRESSION ]]

Para hacer que el script sea portátil, prefiera usar la prueba anterior [ comando, que está disponible en todos los shells POSIX. La nueva versión mejorada de la test comando [[ (corchetes dobles) es compatible con la mayoría de los sistemas modernos que usan Bash, Zsh y Ksh como shell predeterminado.

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

A continuación se muestran 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 si STRING1 y STRING2 son iguales.
  • STRING1 != STRING2 - Verdadero si STRING1 y STRING2 no son iguales.
  • INTEGER1 -eq INTEGER2 - Verdadero si INTEGER1 y INTEGER2 son iguales.
  • INTEGER1 -gt INTEGER2 - Verdadero si INTEGER1 es mayor que INTEGER2 .
  • INTEGER1 -lt INTEGER2 - Verdadero si INTEGER1 es menor que INTEGER2 .
  • INTEGER1 -ge INTEGER2 - Verdadero si INTEGER1 es igual o mayor que INTEGER2.
  • INTEGER1 -le INTEGER2 - Verdadero si INTEGER1 es igual o menor que INTEGER2 .
  • -h FILE - Verdadero si el FILE existe y es un enlace simbólico.
  • -r FILE - Verdadero si el FILE existe y es legible.
  • -w FILE - Verdadero si el FILE existe y se puede escribir.
  • -x FILE - Verdadero si el FILE existe y es ejecutable.
  • -d FILE - Verdadero si el FILE existe y es un directorio.
  • -e FILE - Verdadero si el FILE existe y es un archivo, independientemente del tipo (nodo, directorio, socket, etc.).
  • -f FILE - Verdadero si el FILE existe y es un archivo normal (no un directorio o dispositivo).

Conclusión #

El if , if..else y if..elif..else Las declaraciones le permiten controlar el flujo de ejecución del script Bash al evaluar las condiciones dadas.

Si tiene alguna pregunta o comentario, no dude en dejar un comentario.


Linux
  1. Cómo usar la declaración condicional if else en Bash Script

  2. Declaración de Bash If-Else con ejemplos

  3. 4 Ejemplos de declaraciones If de Bash (If then fi, If then else fi, If elif else fi, Nested if)

  4. declaración Bash/sh 'if else'

  5. ¿Hay una instrucción goto en bash?

Bash Shebang

Declaración de Python if..else

Bash Scripting – Declaración de caso

Cómo trabajar con declaraciones de casos en scripts Bash

Sintaxis de Bash If Else con ejemplos

Comprender Bash If Else y otras declaraciones condicionales