Si alguna vez ha escrito un script de Bourne Again Shell (Bash), sabe que pueden volverse complejos rápidamente a medida que les agrega más lógica. ¿Cómo evitar estropear tus guiones? Las declaraciones condicionales, como Bash if else, son una forma de agregar lógica, lo que permite que su secuencia de comandos tome decisiones basadas en ciertas condiciones.
En este tutorial, aprenderá a usar sentencias if-else y case de Bash para escribir un script de Bash sin errores. Todo esto con algunas de las mejores prácticas para escribir scripts de Bash.
¿Listo? ¡Siga leyendo y lleve sus secuencias de comandos de Bash al siguiente nivel!
Requisitos
Este tutorial será una demostración práctica. Si desea seguirnos, asegúrese de tener
- Un sistema Linux o Windows con Bash instalado:el Subsistema de Windows para Linux (WSL) es una excelente opción para los usuarios de Windows.
- Un editor de código/texto.
¿Por qué usar sentencias condicionales?
Las declaraciones condicionales son una de las herramientas más importantes en las secuencias de comandos de Bash, ya que le permiten tomar decisiones en sus secuencias de comandos en función de ciertas condiciones.
Por ejemplo, podría usar una declaración condicional para verificar si existe un archivo antes de intentar eliminarlo. O puede usar uno para verificar si un usuario tiene permiso para acceder a un determinado recurso.
Las declaraciones condicionales hacen que sus scripts sean más flexibles y potentes. Imagine que está escribiendo un script para eliminar todos los archivos en un directorio. Con una declaración condicional, puede eliminar archivos que tengan más de 30 días.
Comprender la declaración IF
Suficiente con la introducción del script Bash y ensúciate las manos. Eche un vistazo más de cerca a una de las declaraciones condicionales más populares, el if
declaración.
El if
es la forma más básica de agregar condicionales a sus scripts de Bash, con la siguiente sintaxis:
- Empezando con la palabra clave if, usted especifica las [[condiciones]] a cumplir. A continuación, se ejecuta el código dentro de la declaración if, y la declaración termina con la palabra clave fi.
- La palabra clave then separa la condición del código (declaración) que se ejecutará si se cumple la condición. Este código puede tener varias líneas si agrega un punto y coma (;) como separador de línea.
if [[ condition ]]; then
statement
fi
Suponga que está creando un script que solicita el nombre de usuario correcto para su sistema antes de iniciar sesión:
1. Abra su terminal y cree un nuevo bash_if_demo.sh archivo utilizando el editor de texto de su elección.
nano bash_if_demo.sh
2. Copia y pega el siguiente código en tu bash_if_demo.sh archivo, guarde los cambios y cierre el archivo.
El siguiente código solicita un nombre de usuario y, si se ingresa el correcto, el código imprime un mensaje de "bienvenida" junto con la fecha y hora actuales.
Puede registrar la fecha y la hora en que el usuario intenta acceder al sistema para un análisis más detallado.
La primera línea #!/bin/bash (shebang) le dice al sistema qué intérprete usar para ejecutar el resto del código en el archivo. En este caso, estás usando bash.
#!/bin/bash
# Prints a question to the screen.
echo "Whats your name?"
# Reads keyboard input and stores it in the $NAME variable
read NAME
# Starts the if statement - checks to see if the $NAME variable's value
# is equal to ATA. If it is, the code inside runs. Otherwise, the code will not run.
if [ $NAME == "ATA" ]
then
# Prints a message to the screen, only if the value stored in the $NAME variable
# is equal to ATA.
echo "Welcome back ATA!"
fi
# Prints the current date and time to the screen. Since this line is outside
# of the if statement, it always runs regardless of the $NAME variable's value.
date
3. Por último, ejecute el siguiente comando para ejecutar el script bash_if_demo.sh para ver qué hace.
bash bash_if_demo.sh
Tenga en cuenta que cualquiera que sea el shell Bash que esté usando, debe agregar bash antes del nombre del script, para que el sistema use Bash para ejecutar su código.
Ingrese ATA, luego presione Enter y verá el siguiente resultado.
No recibirá el mensaje de bienvenida si ingresa algo que no sea "ATA", solo la fecha y hora actuales. ¿Por qué? Porque su instrucción if está comprobando el valor exacto que está almacenado en la variable $NAME.
Tenga en cuenta que si las declaraciones distinguen entre mayúsculas y minúsculas. Entonces, "ata", "aTa", "Ata", etc., no son lo mismo que "ATA".
Probar su código con diferentes entradas es una buena práctica para asegurarse de que el código se comporte como se espera.
Comprensión de declaraciones if anidadas
Acaba de aprender los conceptos básicos para escribir declaraciones if, y eso es lo suficientemente bueno si no está escribiendo un código complejo. Pero si lo hace, intente escribir una declaración if anidada para expandir sus declaraciones condicionales. Una sentencia if anidada es una sentencia if que contiene una o más sentencias if.
A continuación se muestra la sintaxis básica para declaraciones if anidadas, donde:
if [[ conditions ]]
– El exteriorif
instrucción que contiene código que solo se ejecuta si se cumple la condición. En este caso, otroif
declaración).if [[ condition2 ]]
– El interiorif
instrucción que contiene código que solo se ejecuta si se cumplen ambas condiciones.
if [[ conditions
]]; then
if [[ condition2 ]]; then
statement
fi
fi
Llevando el código anterior a un nivel superior configurando un if
declaración que pide una contraseña:
1. Cree un nuevo archivo llamado bash_nested_if_demo.sh con tu editor de texto.
nano bash_nested_if_demo.sh
2. Rellene el código siguiente en bash_nested_if_demo.sh archivo, guarde los cambios y cierre el archivo.
El siguiente código pide un nombre y una contraseña. Si se cumplen ambas condiciones para el nombre y la contraseña, el código imprime un mensaje. De lo contrario, el código no imprimirá ningún mensaje aparte de la fecha y hora actuales.
#!/bin/bash
# Prints a message asking for a name.
echo "Whats your name?"
# Reads input from the keyboard.
read NAME
# Check if the $NAME variable's value is equal to "ATA."
if [ $NAME == "ATA" ]
then
# Prints a message asking for a password.
echo "Password"
# Reads input from the keyboard.
read Password
# Nested if statement - Check if the $Password variable's value equals "pwd123."
if [ "$Password" == "pwd123" ]; then
# Prints a message if both conditions for name and password are met.
echo "You logged in as ATA"
fi
fi
# Prints the current date and time
date
3. Por último, ejecute el siguiente comando para ejecutar bash_nested_if_demo.sh guión.
bash bash_nested_if_demo.sh
Introduce ATA para el nombre y pwd123 para la contraseña.
Si ingresa algo que no sea "ATA" o "pwd123", el único mensaje que recibirá es la fecha y hora actuales. ¿Por qué? Se deben cumplir ambas condiciones en sus declaraciones if anidadas.
Comprensión de las declaraciones IF ELSE
La declaración if es una herramienta poderosa y de uso común en las secuencias de comandos de Bash. Si las declaraciones pueden ayudar a tomar decisiones en sus guiones. Pero vale la pena señalar que existen algunos inconvenientes al usar declaraciones if.
El principal inconveniente es que las sentencias if pueden hacer que su código sea difícil de leer y mantener, especialmente si ha anidado sentencias if dentro de otras sentencias if. Este estilo de secuencias de comandos puede conducir a lo que se conoce como "código espagueti", difícil de leer y comprender.
Entonces, ¿cómo haces que tu código no parezca complicado? Use sentencias if else en lugar de un montón de sentencias if anidadas. La palabra clave else le permite especificar el código que se ejecutará si no se cumple la condición de la instrucción if.
Mire la sintaxis de la instrucción IF ELSE a continuación, donde:
if [[ conditions ]]
– Elif
instrucción, que contiene el código (statement1
) que se ejecutará si se cumple la condición.else
– Elelse
instrucción contiene el código (statement2
) que se ejecutará si la condición en elif
declaración no se cumple.
if [[ conditions ]]; then
statement1
else
statement2
fi
Suponga que está creando un juego de números, que toma un número aleatorio como entrada del usuario:
1. Cree un nuevo archivo llamado bash_if_else_demo.sh.
nano bash_if_else_demo.sh
2. Agregue el siguiente código a su bash_if_else_demo.sh archivo, guarde los cambios y cierre el archivo.
El siguiente código imprime un mensaje que solicita el número de la suerte del usuario e imprime el mensaje You Won si la entrada del usuario es un número par. De lo contrario (si no), el código imprime el mensaje You Lost si la entrada del usuario es un número impar.
#!/bin/bash
# Prints a message asking for the user's lucky number
echo -n "Enter You Lucky Number:"
# Reads the keyboard input.
read var
# Checks if the value is an even number.
if [ $((var%2)) == 0 ]; then
# Prints a message if the condition is met
echo "You Won!"
else
# Prints a message if the condition is not met
echo "You Lost!"
fi
3. Ahora, ejecute el siguiente comando para ejecutar el script bash_if_else_demo.sh.
bash bash_if_else_demo.sh
Si ingresa un número par, el mensaje "¡Ganaste!" imprime, como se puede ver a continuación. Pero si ingresa un número impar, el mensaje "¡Perdió!" imprime en su lugar.
Intente mejorar su código agregando otra declaración que verifique si el usuario ingresa una letra de un carácter especial en su lugar.
Comprensión de declaraciones de casos
Hasta ahora, ha visto dos formas de tomar decisiones en sus scripts de Bash:if
declaraciones y else
declaraciones. Pero hay otra forma de tomar decisiones en tus scripts, el case
declaración.
El case
declaración es similar al if
ya que le permite especificar el código que se ejecutará en función de una condición. Pero lo bueno de la declaración de caso es que tendrá una sintaxis más precisa y concisa que el anidado if
declaración.
La sintaxis para la declaración de caso es la siguiente, donde:
case $VAR in
– Elcase
declaración que toma el$VAR
prueba variable contra los patrones que especifique hasta que se encuentra una coincidencia.pattern1)
ypattern2)
-Los patrones a probar, que ejecuta el código (statement1
ostatement2
) una vez que se encuentra un patrón.esac
– Finaliza la declaración del caso.
case $VAR in
pattern1)
statement1
;;
pattern2)
statement2
;;
esac
Suponga que necesita una secuencia de comandos que solicite a los usuarios que ingresen los nombres de sus países y respondan con un mensaje que muestre el idioma que se habla en ese país.
1. Cree un nuevo archivo llamado bash_case_demo.sh.
nano bash_case_demo.sh
2. Rellene el siguiente código en bash_case_demo.sh archivo, guarde los cambios y cierre el archivo.
El siguiente código le pide al usuario el nombre de un país e imprime el idioma oficial de ese país según los patrones en una declaración de caso.
3#!/bin/bash
# Prints a message asking for the user's country name
echo -n "Enter the Country You Live In:"
# Reads keyboard input.
read var
# Prints a message showing the official language in the user's country ($var)
# based on the pattern in the case statement.
echo -n "The official language of $var is "
# Case statement - checks if the user's input ($var) matches the patterns.
case $var in
# Define patterns that print the user's country's official language.
US)
echo -n "English"
;;
Canada)
echo -n "English | French"
;;
Algeria | Bahrain | Egypt| Jordan)
echo -n "Arabic"
;;
*)
echo -n "unknown"
;;
esac
3. Finalmente, ejecute el siguiente comando para ejecutar el script bash_case_demo.sh.
bash bash_case_demo.sh
A continuación, puede ver que se imprime el idioma oficial correspondiente según el país que ingresó el usuario.
Si el país ingresado no coincide con ninguno de los patrones, se usa el patrón predeterminado (*) y se imprime el mensaje desconocido.
Conclusión
En este tutorial, ha dado sus primeros pasos para aprender a usar declaraciones condicionales en Bash. Ha aprendido a simplificar código complejo con sentencias if, if-else y case de Bash.
Ahora tiene la confianza suficiente para usar sentencias condicionales para escribir scripts de Bash de manera más eficiente y con menos errores.
¡Pero no te detengas aquí! Hay más cosas que pueden ofrecer las declaraciones condicionales en Bash. Tal vez comience a aprender sobre la instrucción Bash elif y &&, OR y || operadores? ¡Con un poco de práctica, estarás escribiendo scripts de Bash como un profesional en muy poco tiempo!