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 deVAR
es mayor que cero.-z
VAR
- Verdadero si elVAR
está vacío.STRING1 = STRING2
- Verdadero siSTRING1
ySTRING2
son iguales.STRING1 != STRING2
- Verdadero siSTRING1
ySTRING2
no son iguales.INTEGER1 -eq INTEGER2
- Verdadero siINTEGER1
yINTEGER2
son iguales.INTEGER1 -gt INTEGER2
- Verdadero siINTEGER1
es mayor queINTEGER2
.INTEGER1 -lt INTEGER2
- Verdadero siINTEGER1
es menor queINTEGER2
.INTEGER1 -ge INTEGER2
- Verdadero siINTEGER1
es igual o mayor que INTEGER2.INTEGER1 -le INTEGER2
- Verdadero siINTEGER1
es igual o menor queINTEGER2
.-h
FILE
- Verdadero si elFILE
existe y es un enlace simbólico.-r
FILE
- Verdadero si elFILE
existe y es legible.-w
FILE
- Verdadero si elFILE
existe y se puede escribir.-x
FILE
- Verdadero si elFILE
existe y es ejecutable.-d
FILE
- Verdadero si elFILE
existe y es un directorio.-e
FILE
- Verdadero si elFILE
existe y es un archivo, independientemente del tipo (nodo, directorio, socket, etc.).-f
FILE
- Verdadero si elFILE
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.