Introducción
Los scripts de Bash ayudan a automatizar tareas en tu máquina. La declaración if elif else en los scripts de Bash permite crear casos condicionales y respuestas a resultados específicos del código. La condición if ayuda a automatizar el proceso de toma de decisiones durante un programa.
Este artículo explica qué es la declaración if elif else 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 comandos/terminal.
- Acceso a un editor de texto como Vi/Vim.
¿Qué es la declaración if en Bash?
En programación, la declaración if es una expresión condicional. Sin embargo, el comando probado en la declaración if se evalúa en función del estado de salida. Por lo tanto:
- Si el comando se completa correctamente, 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 fallo puede parecer contraintuitivo. En la mayoría de otros lenguajes de programación, el cero representa falso y uno (o mayor) representa verdadero. Sin embargo, en scripting de Bash, la convención UNIX devuelve el estado de salida en lugar de un valor de verdad, y los dos no deben confundirse.
Prueba un comando de error de ejemplo (1 mayor que 100) en el terminal ejecutando:
test 1 -gt 100
Comprueba el estado de salida usando el comando echo:
echo $?
La prueba devuelve un código de salida 1, lo que indica que la expresión falló.
De manera similar, verifica un comando de ejemplo que se evalúa correctamente (1000 mayor que 100) en el terminal con:
test 1000 -gt 100
Imprime el estado de salida para confirmar que el comando se ejecutó correctamente:
echo $?
La prueba devuelve un código de salida 0, lo que muestra que el comando se completó sin errores.
Ejemplo de declaración if en Bash
Sigue las instrucciones a continuación para crear un ejemplo de script de Bash usando una declaración if.
1. Abre el terminal (CTRL+ALT+T) y crea un script de ejemplo para probar cómo funciona la declaración if en Bash:
vi test_script.sh
2. En el script, agrega las siguientes líneas:
echo -n "Por favor, ingresa un número entero: "
read VAR
echo Tu número es $VAR
if test $VAR -gt 100
then
echo "Es mayor que 100"
fi
echo ¡Adiós!
Cada línea en el script hace lo siguiente:
- Las líneas 1-3 proporcionan instrucciones para ingresar un número a través de la consola. El número se lee en una variable llamada VAR y se imprime.
- La línea 4 comienza la declaración if y verifica el estado de salida del comando justo después (
$VAR -gt 100
). - Las líneas 5-6 señalan el inicio de los comandos que se ejecutarán solo si la declaración en la línea 4 se completa correctamente (con un estado de salida 0), lo que significa que hemos ingresado un número mayor que 100.
- La línea 7 señala el final de la declaración if.
- La línea 8 está fuera de la declaración y se ejecuta como se espera, independientemente del resultado de la declaración if.
3. Guarda y cierra Vim:
:wq
4. A continuación, haz que el archivo sea ejecutable:
chmod +x test_script.sh
5. Por último, ejecuta el script con:
./test_script.sh
El script muestra un mensaje diferente en función del número ingresado. Ejecuta el script varias veces y prueba con otros números para confirmar el comportamiento.
Sintaxis de la Declaración if en Bash
La sintaxis básica para una declaración if en Bash es:
if <comandos>
then
<comandos>
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 verifica el estado de salida.then
ejecuta los comandos solo si la revisión anterior se completa con éxito.fi
cierra la declaración if.
Encerrar el comando de prueba entre diferentes corchetes resulta en diferentes métodos de ejecución para la declaración if. La siguiente tabla proporciona una breve descripción y un caso de uso para cada tipo de corchete.
Sintaxis | Qué es | Cuándo usarlo |
---|---|---|
if ( <comandos> ) | Subshell ejecutado en un subproceso. | Cuando los comandos afectan al shell o al entorno actual. Los cambios no permanecen cuando el subproceso se completa. |
if (( <comandos> )) | Extensión de Bash. | Para operaciones aritméticas y manipulación de variables en estilo C. |
if [ <comandos> ] | Builtin POSIX, alias para test <comandos> . | Comparar números y comprobar si un archivo existe. |
if [[ <comandos> ]] | Extensión de Bash, una versión avanzada de los corchetes simples. | Comparar cadenas con un patrón de comodines. |
A continuación, se presentan ejemplos de scripts de Bash que utilizan cada tipo de corchete con una explicación más detallada.
Sintaxis de los Corchetes Simples
Usar corchetes simples en scripting de Bash crea un subproceso. Cuando se combina con la declaración if, el subproceso se finaliza antes de continuar con el programa. La declaración if analiza el estado de salida y actúa en consecuencia.
La declaración if en Bash con la sintaxis de corchetes simples se ve de la siguiente manera:
if ( <comandos> )
then
<comandos>
fi
Prueba el siguiente ejemplo para ver cómo se comporta el subproceso junto con la declaración if:
1. Crea el script utilizando Vim:
vi single_parentheses.sh
2. Agrega las siguientes líneas de código al script:
outer_variable=Definido
echo Antes del if:
echo inner_variable = $inner_variable
echo outer_variable = $outer_variable
if (
echo Dentro del subproceso:
inner_variable=Definido
echo inner_variable = $inner_variable
outer_variable=Cambiado
echo outer_variable = $outer_variable
)
then
echo Después de then:
echo inner_variable = $iner_variable
echo outer_variable = $outer_variable
fi
echo Después de fi:
echo inner_variable = $inner_variable
echo outer_variable = $outer_variable
El programa hace lo siguiente:
- La línea 1 crea una variable llamada outer_variable en la que almacenamos una cadena Definido.
- Las líneas 2-4 imprimen las variables en la consola. En este momento, outer_variable tiene una cadena almacenada en ella, mientras que inner_variable está en blanco.
- La línea 5 inicia la declaración if y un subproceso, delimitado por corchetes simples.
- Las líneas 6-11 almacenan una cadena dentro de inner_variable y cambian 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 termina con éxito con un código de salida 0.
- Las líneas 12-16 se ejecutan después del subproceso e imprimen los valores de las variables. Sin embargo, los valores vuelven a ser lo que eran antes de la declaración if. El subproceso solo almacena los valores localmente y no globalmente.
- Las líneas 16-19 se ejecutan después de los comandos en la cláusula then. Los valores permanecen sin cambios fuera de la declaración.
3. Guarda el script y cierra el editor:
:wq
4. Haz que el script sea ejecutable:
chmod +x single_parentheses.sh
5. Por último, ejecuta el ejemplo para probar los resultados:
./single_parentheses.sh
La salida muestra el estado de las variables a medida que avanza el programa.
Sintaxis de los Corchetes Dobles
La sintaxis de los corchetes dobles en una declaración if de Bash es:
if (( <comandos> ))
then
<comandos>
fi
La construcción de corchetes dobles en Bash permite:
- Evaluación aritmética. Definir una variable como a=$(( 1+1 )) calcula la ecuación y establece a en 2.
- Manipulación de variables en estilo C. Por ejemplo, incrementar variables con (( a++ )).
Cuando se utiliza la sintaxis de corchetes dobles en una declaración if, la evaluación se comporta de manera diferente. Si la expresión se evalúa como 0, entonces la prueba if no se cumple.
Nota: Los corchetes dobles son análogos a la mayoría de los otros lenguajes de programación, donde cero es falso y uno es verdadero.
Prueba el siguiente ejemplo para ver cómo funcionan los corchetes dobles:
1. Crea un script de Bash en la terminal:
vi double_parentheses.sh
2. Agrega el siguiente código a double_parentheses.sh:
variable=-2
echo Antes del primer if: $variable
if (( variable++ ))
then
echo Incrementado estilo ++: $variable
fi
echo Después del primer if: $variable
if (( variable=variable+1 ))
then
echo Incrementado aritméticamente $variable
fi
echo Después del segundo if: $variable
Cada número de línea en el script hace lo siguiente:
- La línea 1 define una variable y establece el valor en -2.
- Las líneas 3-5 incrementan el valor en estilo C dentro de corchetes dobles y verifican el valor. Si la variable no es cero, el if imprime un mensaje en la consola.
- Las líneas 8-10 incrementan la variable en uno utilizando la notación aritmética regular e imprimen un mensaje si la variable no es cero.
3. Guarda el script y cierra Vim:
:wq
4. Cambia los permisos del script para que sea ejecutable:
chmod +x double_parentheses.sh
5. Ejecuta el script para ver los resultados:
./double_parentheses.sh
Sintaxis de los Corchetes Simples
Los corchetes simples son otro nombre para el comando test y una utilidad POSIX estándar disponible para todos los shells. La sintaxis básica es:
if [ <comandos> ]
then
<comandos>
fi
El primer ejemplo de declaración if en Bash proporcionado en este tutorial (test_script.sh) funciona igual de bien con la sintaxis alternativa:
echo -n "Por favor, ingresa un número entero: "
read VAR
echo Tu número es $VAR
if [ $VAR -gt 100 ]
then
echo "Es mayor que 100"
fi
echo Adiós!
Ejecuta el script para confirmar que la salida es equivalente. Para obtener la documentación completa y detalles sobre el uso de la sintaxis de corchetes, ejecuta el comando man en la utilidad test:
man test
Sintaxis de los Corchetes Dobles
La sintaxis de los corchetes dobles en los scripts de Bash es la mejor opción si no se necesita portabilidad. Los corchetes dobles son superiores a los corchetes simples e incluyen muchas opciones avanzadas. La sintaxis es:
if [[ <comandos> ]]
then
<comandos>
fi
Prueba el siguiente ejemplo para ver cómo funciona la coincidencia de cadenas con comodines en un comando if:
1. Crea un archivo de script de shell llamado double_brackets:
vi double_brackets.sh
2. Agrega el siguiente código:
if [[ $USER == k* ]]
then
echo Hola $USER
fi
echo Adiós!
3. El script verifica si la letra inicial del nombre de usuario es “k” y envía un mensaje de saludo en caso afirmativo. Guarda y cierra el script:
:wq
4. Haz que el archivo sea ejecutable con chmod:
chmod +x double_brackets.sh
5. Ejecuta el programa con:
./double_brackets.sh
Otros tipos de declaraciones condicionales en Bash
Declaración if else
La declaración if else proporciona un método para definir diferentes acciones basadas en la salida de la condición verificada. La sintaxis básica es:
if <comando>
then
<comandos>
else
<comandos>
fi
El siguiente ejemplo muestra cómo funciona la condición if else:
1. Crea un nuevo script usando Vim:
vi if_else.sh
2. Inserta el siguiente código en el script:
echo -n "Por favor, ingresa un número entero: "
read VAR
echo Tu número es $VAR
if [ $VAR -gt 100 ]
then
echo "Es mayor que 100"
else
echo "Es menor que 100"
fi
echo Adiós!
La declaración verifica la salida del comando en la 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 la línea 6 e imprime el mensaje.
- Si el número es menor que 100, se imprime el mensaje en la cláusula else (línea 8) en la consola.
3. Guarda el script y cierra Vim:
:wq
4. Haz que el script sea ejecutable:
chmod +x if_else.sh
5. Por último, ejecuta el script varias veces y prueba con diferentes valores:
./if_else.sh
Declaración if elif
La cláusula elif combinada con la declaración if else crea múltiples comprobaciones condicionales. El if elif crea una serie de comprobaciones con diferentes resultados. La sintaxis es:
if <comando>
then
<comandos>
elif <comando>
then
<comandos>
else
<comandos>
fi
Para crear un script utilizando elif:
1. Crea un archivo de shell llamado elif:
vi elif.sh
2. En el archivo elif.sh, agrega el siguiente código de ejemplo:
echo -n "Por favor, ingresa un número entero: "
read VAR
echo Tu número es $VAR
if [ $VAR -gt 100 ]
then
echo "Es mayor que 100"
elif [ $VAR -lt 100 ]
then
echo "Es menor que 100"
else
echo "Es exactamente 100"
fi
echo Adiós!
El ejemplo agrega una comprobación elif en la 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 pasa a la cláusula else.
3. Guarda y cierra el archivo:
:wq
4. Haz que el archivo elif.sh sea ejecutable:
chmod +x elif.sh
5. Ejecuta el script varias veces y verifica el comportamiento para diferentes números:
./elif.sh
Agrega varias cláusulas elif para ampliar la declaración y realizar comprobaciones más detalladas. Si la serie de patrones if y elif crece, la mejor opción es utilizar una declaración case.
Declaración if anidada
Las declaraciones if anidadas añaden una rama dentro del if. Específicamente, cuando un comando pasa la primera comprobación if, se somete a una nueva comprobación para filtrar aún más el resultado. La sintaxis es:
if <comandos>
then
if <comandos>
then
<comandos>
fi
fi
La declaración if anidada se utiliza comúnmente para buscar en matrices multidimensionales. Sin embargo, trata de evitar tener más de dos o tres declaraciones if anidadas para reducir la complejidad del programa. Reconsidera la lógica del código cuando el if anidado sigue aumentando en profundidad.
Conclusión
Siguiendo este tutorial, deberías saber cómo crear una declaración if elif else en un script de Bash y las diferentes sintaxis disponibles. A continuación, consulta cómo implementar la declaración if para verificar si un archivo o directorio existe en Bash.