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.
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 deVAR
es mayor que cero. -
-z
VAR
True si elVAR
está vacío. -
STRING1 = STRING2
True siSTRING1
ySTRING2
son iguales. -
STRING1 != STRING2
True siSTRING1
ySTRING2
no son iguales., -
INTEGER1 -eq INTEGER2
– True ifINTEGER1
andINTEGER2
are equal. -
INTEGER1 -gt INTEGER2
– True ifINTEGER1
is greater thanINTEGER2
. -
INTEGER1 -lt INTEGER2
– True ifINTEGER1
is less thanINTEGER2
. -
INTEGER1 -ge INTEGER2
– True ifINTEGER1
is equal or greater than INTEGER2. -
INTEGER1 -le INTEGER2
– True ifINTEGER1
is equal or less thanINTEGER2
., -
-h
FILE
– True if theFILE
exists and is a symbolic link. -
-r
FILE
– True if theFILE
exists and is readable. -
-w
FILE
– True if theFILE
exists and is writable. -
-x
FILE
– True if theFILE
exists and is executable., -
-d
FILE
True si elFILE
existe y es un directorio. -
-e
FILE
True si elFILE
existe y es un archivo, independientemente de su tipo (nodo, directorio, socket, etc.). -
-f
FILE
True si elFILE
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.