Introducción
Los scripts de Bash ayudan a automatizar tareas en su máquina. El if elif else
La declaración en scripts bash permite crear casos condicionales y respuestas a resultados de código específicos. El if
condicional ayuda a automatizar un proceso de toma de decisiones durante un programa.
Este artículo explica qué es if elif else
declaración es y muestra la sintaxis a través de varios ejemplos.
Requisitos previos
- Una máquina con sistema operativo Linux.
- Acceso a la línea de comando/terminal.
- Acceso a un editor de texto como Vi/Vim.
¿Qué es la instrucción Bash if?
En programación, el if
declaración es una expresión condicional. Sin embargo, el comando probado en if
declaración se evalúa en función del estado de salida . Por lo tanto:
- Si el comando se completa con éxito , el estado de salida es 0 .
- Si la declaración arroja un error , el estado de salida es cualquier número entre 1 y 255 .
El cero para el éxito y cualquier valor distinto de cero para el fracaso parece contradictorio. En la mayoría de los demás lenguajes de programación, cero representa falso y uno (o más) representa verdadero. Sin embargo, en las secuencias de comandos de bash, la convención de UNIX devuelve el estado de salida en lugar de un valor de verdad, y los dos no deben confundirse.
Pruebe un comando de error de muestra (1 mayor que 100) en la terminal ejecutando:
test 1 -gt 100
Verifique el estado de salida usando el comando echo:
echo $?
La prueba devuelve un código de salida 1
, indicando que la expresión falló.
De manera similar, verifique un comando de muestra que se evalúe correctamente (1000 mayor que 100) en la terminal con:
test 1000 -gt 100
Imprima el estado de salida para confirmar que el comando fue exitoso:
echo $?
La prueba devuelve un código de salida 0
, mostrando el comando completado sin error.
Ejemplo de instrucción Bash if
Siga las instrucciones a continuación para crear un script bash de ejemplo usando un if
declaración.
1. Abra la terminal (CTRL +ALT +T ) y cree un script de ejemplo para probar cómo bash if
la declaración funciona:
vi test_script.sh
2. En el script, agregue las siguientes líneas:
echo -n "Please enter a whole number: "
read VAR
echo Your number is $VAR
if test $VAR -gt 100
then
echo "It's greater than 100"
fi
echo Bye!
Cada línea del script hace lo siguiente:
- Líneas 1-3 proporcionar instrucciones para ingresar un número a través de la consola. El número se lee en una variable llamada
VAR
e impreso.
- Línea 4 inicia el
if
y comprueba el estado de salida del comando inmediatamente después ($VAR -gt 100
).
- Líneas 5 y 6 señala el inicio de los comandos para ejecutar solo si la declaración en la línea 4 se completa con éxito (con un estado de salida 0), lo que significa que ingresamos un número mayor que 100.
- Línea 7 señala el final del
if
declaración.
- Línea 8 está fuera de la declaración y se ejecuta como se esperaba, independientemente del
if
resultado.
3. Guarde y cierre Vim:
:wq
4. A continuación, haga que el archivo sea ejecutable:
chmod +x test_script.sh
5. Por último, ejecute el script con:
./test_script.sh
El script genera un mensaje diferente basado en el número ingresado. Ejecute el script varias veces y pruebe otros números para confirmar el comportamiento.
Sintaxis de declaración Bash if
La sintaxis básica para bash if
declaración es:
if <commands>
then
<commands>
fi
Cada palabra clave tiene una función específica:
if
señala el comienzo de la declaración. El comando justo después es aquel en el que se aplica la comprobación de estado de salida.
then
ejecuta los comandos solo si la revisión anterior se completa con éxito.
fi
cierra la sentencia if.
Encerrar el comando de prueba entre corchetes diferentes da como resultado diferentes métodos de ejecución para if
declaración. La siguiente tabla proporciona una breve descripción, así como un caso de uso para cada tipo de paréntesis.
Sintaxis | Qué es | Cuándo usar |
if ( <commands> ) | Subcapa ejecutada en un subproceso. | Cuando los comandos afectan el shell o entorno actual. Los cambios no permanecen cuando se completa la subcapa. |
if (( <commands> )) | Extensión Bash. | Usar para operaciones aritméticas y manipulación de variables de estilo C. |
if [ <commands> ] | POSIX integrado, alias para test <commands> . | Comparar números y probar si existe un archivo. |
if [[ <commands> ]] | Extensión Bash, una versión avanzada de corchetes simples. | Cadena que coincide con un patrón de comodines. |
A continuación se muestran ejemplos de scripts de bash que usan cada tipo de paréntesis con una explicación más detallada.
Sintaxis de paréntesis simple
El uso de paréntesis simples en scripts de bash crea una subcapa. Cuando se combina con el if
instrucción, el subproceso finaliza antes de continuar con el programa. El if
analiza el estado de salida y actúa en consecuencia.
El bash if
declaración con sintaxis de paréntesis simple se parece a lo siguiente:
if ( <commands> )
then
<commands>
fi
Pruebe el siguiente ejemplo para ver cómo se comporta el subproceso junto con el if
declaración:
1. Cree el script usando Vim:
vi single_parentheses.sh
2. Agregue las siguientes líneas de código al script:
outer_variable=Defined
echo Before if:
echo inner_variable = $inner_variable
echo outer_variable = $outer_variable
if (
echo Inside subshell:
inner_variable=Defined
echo inner_variable = $inner_variable
outer_variable=Changed
echo outer_variable = $outer_variable
)
then
echo After then:
echo inner_variable = $iner_variable
echo outer_variable = $outer_variable
fi
echo After fi:
echo inner_variable = $inner_variable
echo outer_variable = $outer_variable
El programa hace lo siguiente:
- Línea 1 crea una variable llamada
outer_variable
en el que almacenamos una cadena Defined
.
- Líneas 2-4 Imprime las variables en la consola. En este momento,
outer_variable
tiene una cadena almacenada, mientras que inner_variable
está en blanco.
- Línea 5 inicia el
if
instrucción y un subproceso, delimitados por paréntesis simples.
- Línea 6-11 almacenar una cadena dentro de
inner_variable
y cambia la outer_variable
a una cadena diferente. Ambos valores se imprimen en la consola y el subproceso finaliza con un código de salida. En este caso, el subproceso finaliza con éxito con un código de salida 0
.
- Líneas 12-16 ejecutar después del subproceso e imprimir los valores de las variables. Sin embargo, los valores vuelven a ser los que eran antes del
if
declaración. El subproceso solo almacena los valores localmente y no globalmente.
- Líneas 16-19 ejecutar después de los comandos en
then
cláusula. Los valores permanecen sin cambios fuera de la declaración.
3. Guarde el script y cierre el editor:
:wq
4. Haga que el script sea ejecutable:
chmod +x single_parentheses.sh
5. Por último, ejecute el ejemplo para probar los resultados:
./single_parentheses.sh
La salida imprime los estados de las variables a medida que avanza el programa.
Sintaxis de doble paréntesis
La sintaxis de doble paréntesis para bash if
declaración es:
if (( <commands> ))
then
<commands>
fi
La construcción de doble paréntesis en bash permite:
- Evaluación aritmética . Definiendo una variable como
a=$(( 1+1 ))
calcula la ecuación y establece a
a 2.
- Manipulación de variables al estilo C. Por ejemplo, incrementando variables con
(( a++ ))
.
Cuando se usa la sintaxis de doble paréntesis en un if
declaración, la evaluación se comporta de manera diferente. Supongamos que la expresión se evalúa como 0
, entonces el if
la prueba no pasa.
Pruebe el siguiente ejemplo para ver cómo funcionan los paréntesis dobles:
1. Cree un script bash en la terminal:
vi double_parentheses.sh
2. Agregue el siguiente código a double_parentheses.sh :
variable=-2
echo Before first if: $variable
if (( variable++ ))
then
echo Incremented ++ style: $variable
fi
echo After first if: $variable
if (( variable=variable+1 ))
then
echo Incremented arithmetically $variable
fi
echo After second if: $variable
Cada número de línea en el script hace lo siguiente:
- Línea 1 define una variable y establece el valor en
-2
.
- Líneas 3-5 incrementa el valor estilo C dentro de paréntesis dobles y verifica el valor. Si la variable no es cero, el if imprime un mensaje en la consola.
- Líneas 8-10 incrementa la variable en uno usando notación aritmética regular e imprime un mensaje si la variable no es cero.
3. Guarde el script y cierre Vim:
:wq
4. Cambie los permisos del script a ejecutable:
chmod +x double_parentheses.sh
5. Ejecute el script para ver los resultados:
./double_parentheses.sh
Sintaxis de paréntesis único
El corchete único es otro nombre para la test
comando y una utilidad POSIX estándar disponible para todos los shells. La sintaxis básica es:
if [ <commands> ]
then
<commands>
fi
El primer bash if
ejemplo provisto en este tutorial (test_script.sh ) funciona igual de bien con la sintaxis alternativa:
echo -n "Please enter a whole number: "
read VAR
echo Your number is $VAR
if [ $VAR -gt 100 ]
then
echo "It's greater than 100"
fi
echo Bye!
Ejecute el script para confirmar que la salida sea equivalente. Para obtener la documentación completa y los detalles sobre el uso de la sintaxis de corchetes, ejecute el comando man en test
utilidad:
man test
Sintaxis de doble paréntesis
La sintaxis de doble paréntesis en bash if
scripts es la mejor opción si la portabilidad no es necesaria. Los brackets dobles son superiores a los brackets simples e incluyen muchas opciones avanzadas. La sintaxis es:
if [[ <commands> ]]
then
<commands>
fi
Pruebe el siguiente ejemplo para ver cómo funciona la coincidencia de cadenas comodín en un if
comando:
1. Cree un archivo de script de shell llamado double_brackets :
vi double_brackets.sh
2. Agrega el siguiente código:
if [[ $USER == k* ]]
then
echo Hello $USER
fi
echo Bye!
3. El script verifica si la letra inicial del nombre de usuario es k
y envía un mensaje de saludo si es así. Guarde y cierre el script:
:wq
4. Haga que el archivo sea ejecutable con chmod:
chmod +x double_brackets.sh
5. Ejecute el programa con:
./double_brackets.sh
Otros tipos de declaraciones condicionales de Bash
El if
La declaración solo realiza una verificación condicional. Modificar el if
con otros tipos de condicionales bash para crear evaluaciones complejas.
Declaración if else
El if else
La declaración proporciona un método para definir diferentes acciones basadas en la salida del condicional verificado. La sintaxis básica es:
if <command>
then
<commands>
else
<commands>
fi
El siguiente ejemplo demuestra cómo if else
obras condicionales:
1. Crea un nuevo script usando Vim:
vi if_else.sh
2. Inserte el siguiente código en el script:
echo -n "Please enter a whole number: "
read VAR
echo Your number is $VAR
if [ $VAR -gt 100 ]
then
echo "It's greater than 100"
else
echo "It's less than 100"
fi
echo Bye!
La declaración verifica la salida del comando en línea 4 e imprime un mensaje descriptivo basado en el resultado:
- Si el número ingresado es mayor que 100 , el programa entra en línea 6 e imprime el mensaje.
- Si el número es menos de 100 , el mensaje en
else
cláusula (línea 8 ) imprime en la consola.
3. Guarde el script y cierre Vim:
:wq
4. Haga que el script sea ejecutable:
chmod +x if_else.sh
5. Por último, ejecute el script varias veces y pruebe varios valores:
./if_else.sh
Declaración if elif
El elif
cláusula combinada con if else
declaración crea múltiples comprobaciones condicionales. El if elif
crea una serie de comprobaciones con diferentes resultados. La sintaxis es:
if <command>
then
<commands>
elif <command>
then
<commands>
else
<commands>
fi
Para crear un script usando elif
:
1. Cree un archivo shell llamado elif :
vi elif.sh
2. En el elif.sh archivo, agregue el siguiente código de ejemplo:
echo -n "Please enter a whole number: "
read VAR
echo Your number is $VAR
if [ $VAR -gt 100 ]
then
echo "It's greater than 100"
elif [ $VAR -lt 100 ]
then
echo "It's less than 100"
else
echo "It's exactly 100"
fi
echo Bye!
El ejemplo agrega un elif
comprobar en línea 7 para ver si el número ingresado es menor que 100. Si las declaraciones en las líneas 4 y 7 fallan, el programa salta a la cláusula else.
3. Guarde y cierre el archivo:
:wq
4. Haz el elif.sh archivo ejecutable:
chmod +x elif.sh
5. Ejecute el script varias veces y verifique el comportamiento de diferentes números:
./elif.sh
Agregar múltiples elif
cláusulas para bifurcar la declaración para verificaciones más detalladas. Para instancias donde el if
y elif
la serie de patrones crece, la mejor opción es usar un case
declaración.
Declaración if anidada
if
las sentencias agregan una rama dentro del if
. Específicamente, cuando un comando pasa la primera verificación if, pasa por una nueva verificación para filtrar aún más el resultado. La sintaxis es:
if <commands>
then
if <commands>
then
<commands>
fi
fi
El if anidado se usa comúnmente para buscar a través de matrices multidimensionales. Sin embargo, trate de evitar tener más de dos o tres if
anidados declaraciones para reducir la complejidad del programa. Reconsidere la lógica del código cuando el if
anidado sigue creciendo en profundidad.