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:
-nVAR- Verdadero si la longitud deVARes mayor que cero.-zVAR- Verdadero si elVARestá vacío.STRING1 = STRING2- Verdadero siSTRING1ySTRING2son iguales.STRING1 != STRING2- Verdadero siSTRING1ySTRING2no son iguales.INTEGER1 -eq INTEGER2- Verdadero siINTEGER1yINTEGER2son iguales.INTEGER1 -gt INTEGER2- Verdadero siINTEGER1es mayor queINTEGER2.INTEGER1 -lt INTEGER2- Verdadero siINTEGER1es menor queINTEGER2.INTEGER1 -ge INTEGER2- Verdadero siINTEGER1es igual o mayor que INTEGER2.INTEGER1 -le INTEGER2- Verdadero siINTEGER1es igual o menor queINTEGER2.-hFILE- Verdadero si elFILEexiste y es un enlace simbólico.-rFILE- Verdadero si elFILEexiste y es legible.-wFILE- Verdadero si elFILEexiste y se puede escribir.-xFILE- Verdadero si elFILEexiste y es ejecutable.-dFILE- Verdadero si elFILEexiste y es un directorio.-eFILE- Verdadero si elFILEexiste y es un archivo, independientemente del tipo (nodo, directorio, socket, etc.).-fFILE- Verdadero si elFILEexiste 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.