Comprender Bash If Else y otras declaraciones condicionales

Escribir un script de Bourne Again Shell (Bash) puede ser una experiencia gratificante, especialmente cuando le agregas lógica, asegurando su robustez. Una forma de incorporar esta lógica, haciendo que tu script sea más inteligente, es a través del uso de declaraciones condicionales, específicamente ‘bash if else’.

En esta inmersión profunda, estás a punto de comprender el poder y los matices de las declaraciones if-else y case de Bash. Esto te ayudará a crear scripts Bash libres de errores e inteligentes. También agregaremos algunas mejores prácticas para asegurarnos de que estés escribiendo scripts como un profesional.

¿Emocionado? ¡Sumérgete y eleva tu habilidad en el scripting de Bash!

Preparando el Escenario: Requisitos Previos

Para sacar el máximo provecho de este tutorial, hay algunas cosas esenciales que debes tener en cuenta:

  • A Linux or Windows system armed with Bash. For those on Windows, the Windows Subsystem for Linux (WSL) is your best bet.
  • A code/text editor to write and refine your ‘bash if else’ scripts.

¿Por qué Deberías Aprovechar las Declaraciones bash if else?

¿Por qué las declaraciones condicionales son tan veneradas en el scripting de Bash? Simplemente, otorgan a tus scripts capacidades de toma de decisiones basadas en condiciones predefinidas.

Por ejemplo, puedes emplear ‘bash if else’ para verificar si un archivo existe antes de intentar eliminarlo. Alternativamente, podrías querer verificar si un usuario posee los permisos necesarios antes de permitirles acceder a un recurso.

Infundir scripts con estructuras ‘bash if else’ no solo amplifica su flexibilidad sino también su potencia. Imagina un script diseñado para purgar todos los archivos en una carpeta. Utilizando ‘bash if else’, puedes eliminar quirúrgicamente solo aquellos archivos con más de 30 días de antigüedad, preservando el resto.

Sumergiéndonos en la declaración ‘bash if else’

Ahora, dejemos la introducción atrás y ensuciemos nuestras manos. Comenzaremos con una de las declaraciones condicionales más universalmente aceptadas: la declaración ‘bash if else’.

En su núcleo, el ‘bash if else’ es una puerta de entrada para insertar condicionales en tus scripts de Bash. Observa su sintaxis elegante a continuación:

  • Comienza con la palabra clave if, seguida de las condiciones encapsuladas dentro de [[ ]]. A continuación, se ejecuta el código que reside dentro de la declaración ‘bash if else’, concluyendo con la palabra clave fi.
  • La palabra clave then separa la condición de las acciones (o declaraciones) que se ejecutan cuando las condiciones se cumplen. Este bloque de acción puede abarcar varias líneas, separadas por puntos y comas (;).
if [[ condition ]]; then
	statement
fi

Imagina la creación de un sistema de inicio de sesión. Solicita el nombre de usuario correcto antes de otorgar acceso:

1. Inicia tu terminal e inicia un nuevo archivo bash_if_demo.sh utilizando tu editor de texto preferido. Este será nuestro patio de recreo para entender las declaraciones ‘bash if else’.

nano bash_if_demo.sh

2. Incruste el ejemplo de ‘bash if else’ proporcionado a continuación en su archivo bash_if_demo.sh. Una vez insertado, guarde las modificaciones y salga del editor.

El script de ejemplo ‘bash if else’ solicita un nombre de usuario. Si se ingresa el nombre de usuario esperado, se muestra un mensaje de bienvenida, complementado con la fecha y hora actual.

Mantener un registro de la fecha y hora de los intentos de acceso del usuario puede ser invaluable para análisis futuros.

La línea introductoria #!/bin/bash (comúnmente conocida como shebang) indica al sistema el intérprete a utilizar para procesar el código siguiente en el script. Aquí, ‘bash’ es nuestro intérprete elegido.

#!/bin/bash
# Imprime una pregunta en la pantalla.
echo "Whats your name?"
# Captura la entrada del teclado, almacenándola en la variable $NAME
read NAME
# Inicia la declaración 'bash if else' - examina si el valor en $NAME 
# coincide con "ATA". Si hay una coincidencia, se ejecuta el código adjunto. Si no, se omite.
if [ $NAME == "ATA" ]
then
  # Muestra un mensaje solo si el valor en $NAME es igual a "ATA".
  echo "Welcome back ATA!"
fi
# Fuera del 'bash if else', esto siempre muestra la fecha y hora actual.
date

3. Ahora, pongamos a prueba nuestro script ‘bash if else’. Ejecute el siguiente comando:

bash bash_if_demo.sh

Recuerde, independientemente de la variante de shell Bash que esté utilizando, prefije el nombre de su script con ‘bash’. Esto asegura que el sistema utilice Bash para la ejecución del script.

Ingrese “ATA” y presione Enter. El resultado debería parecerse al siguiente:

Demonstration of the bash_if_demo.sh ‘bash if else’ Script

Si ingresa cualquier cosa que no sea “ATA”, el mensaje de bienvenida estará ausente en la salida. Solo se mostrará la fecha y hora actuales. Este comportamiento se debe a la declaración ‘bash if else’ que verifica una coincidencia precisa con el valor en la variable $NAME.

Tenga en cuenta que las declaraciones ‘bash if else’ son sensibles a mayúsculas y minúsculas. Por lo tanto, “ata”, “aTa”, “Ata”, y así sucesivamente, son distintos de “ATA”.

Outcome on Entering a Non-matching Value

Pruebe consistentemente sus scripts ‘bash if else’ con entradas variadas. Esto asegura que los scripts funcionen como se espera.

Profundizando: Declaraciones ‘bash if else’ Anidadas

Ya ha comprendido los fundamentos de la elaboración de declaraciones ‘bash if else’. Si bien este conocimiento básico es suficiente para tareas sencillas, los scripts intrincados a menudo requieren construcciones avanzadas. Aquí es donde entran en juego las declaraciones ‘bash if else’ anidadas. Esencialmente, es una declaración ‘if’ que alberga una o varias declaraciones ‘if’ adicionales.

La estructura a continuación ilustra la sintaxis básica para las declaraciones ‘bash if else’ anidadas. Aquí, la cláusula externa if [[ condiciones ]] engloba el código ejecutable solo cuando se cumple la condición. En nuestro contexto, el código anidado es otra declaración ‘if’.

  • if [[ condiciones ]] – Esto representa la declaración externa de ‘bash if else’. El código anidado (otra declaración ‘if’) solo se ejecuta si la condición establecida es verdadera.
  • if [[ condición2 ]] – Esto representa la cláusula interna de ‘bash if else’. Contiene código que se ejecuta si y solo si ambas condiciones se cumplen.
if [[ conditions ]]; then
	if [[ condition2 ]]; then
		statement
	fi
fi

Profundicemos. Mejorando nuestro ejemplo anterior de ‘bash if else’, ahora incluiremos una declaración if que pregunte por una contraseña:

1. Primero, establece un nuevo archivo titulado bash_nested_if_demo.sh usando tu editor de texto favorito.

nano bash_nested_if_demo.sh

2. Transfiere el código ‘bash if else’ proporcionado a continuación al archivo bash_nested_if_demo.sh, guarda tus cambios y cierra el editor.

Este código ‘bash if else’ solicita tanto un nombre como una contraseña. Si las condiciones para el nombre y la contraseña coinciden, se muestra un mensaje particular. Si no hay coincidencia, la salida solo muestra la fecha y hora actuales.

#!/bin/bash
# Presenta un mensaje que solicita un nombre de usuario.
echo "Whats your name?"
# Recopila la entrada del usuario.
read NAME
# Inicia la declaración 'bash if else' para verificar si $NAME coincide con "ATA".
if [ $NAME == "ATA" ]
 then
 # Plantea una pregunta posterior, esta vez para una contraseña.
 echo "Password?"
 # Captura la entrada de la contraseña.
 read Password
   # Anidado 'bash if else' - Asegura si la $Password corresponde con "pwd123".
   if [ "$Password" == "pwd123" ]; then
     # Muestra un mensaje si se cumplen ambas condiciones respecto al nombre y la contraseña.
     echo "You've successfully logged in as ATA."
   fi
fi
# Destaca la fecha y hora actuales.
date

3. Ahora, veamos este guion de ‘bash if else’ en acción. Ejecute el comando a continuación:

bash bash_nested_if_demo.sh

Para obtener resultados óptimos, ingrese ATA como el nombre de usuario y pwd123 como la contraseña.

Demonstrating the bash_nested_if_demo.sh Script in action

Si sus entradas difieren de “ATA” o “pwd123”, el único comentario que recibirá será sobre la fecha y hora actuales. Esto se debe a que la estructura ‘bash if else’ requiere cumplir ambas condiciones.

Validating if entered conditions are met using ‘bash if else’

Decodificación de las declaraciones ‘Bash If Else’

Las declaraciones ‘bash if else’ son fundamentales en la escritura de scripts de Bash, proporcionando capacidades decisivas para sus scripts. Sin embargo, es fundamental comprender que el uso de declaraciones ‘if’ no está exento de sus desventajas.

El desafío evidente es que la excesiva dependencia del ‘if’ puede desordenar tu código, haciéndolo tedioso y desafiante, especialmente cuando entran en juego múltiples declaraciones anidadas de ‘if’. Tales scripts corren el riesgo de convertirse en un “código espagueti”, caracterizado por una reducida legibilidad y una mayor complejidad.

Entonces, ¿cómo puedes simplificar tu script de ‘bash if else’ para que siga siendo comprensible? Opta por declaraciones ‘if else’ en lugar de una montaña de ‘if’ anidados. La palabra clave ‘else’ ofrece la conveniencia de especificar un bloque de código para ejecutar si la condición ‘if’ no se cumple.

Para tener una perspectiva más clara, considera la sintaxis para ‘Bash If Else’ a continuación, donde:

  • if [[ condiciones ]] – Aquí, la declaración ‘bash if else’ incluye el código (declaración1) que se activa solo cuando la condición especificada es válida.
  • else – Esto forma parte de la estructura ‘bash if else’. La declaración else abarca el código (declaración2) que se ejecuta cuando la condición en la cláusula if precedente no se cumple.
if [[ conditions ]]; then
	statement1
else
	statement2
fi

Imagina crear un simple juego de ‘bash if else’ donde el sistema espera un número aleatorio del usuario:

1. Comienza por construir un nuevo archivo llamado bash_if_else_demo.sh.

nano bash_if_else_demo.sh

2. Integra el siguiente código de ‘bash if else’ en tu archivo bash_if_else_demo.sh, guarda las modificaciones y luego sal.

El código de ‘bash if else’ subyacente solicita al usuario su número de la suerte. Si la entrada es par, muestra el mensaje ‘¡Ganaste!’. Por el contrario, un número impar activa la salida ‘¡Perdiste!’.

#!/bin/bash
# Transmite una solicitud para el dígito de la suerte del usuario
echo -n "Input Your Lucky Number:"
# Acepta el número ingresado.
read var
# Condición 'bash if else' para determinar si el valor es par.
if [ $((var%2)) == 0 ]; then
 # Anuncia una victoria si se cumple la condición
 echo "You Won with 'bash if else'!"
else
 # Anuncia una derrota si no se cumple la condición
 echo "You Lost using 'bash if else'!"
fi

3. Para presenciar el funcionamiento del script ‘bash if else’, ejecuta el siguiente comando:

bash bash_if_else_demo.sh

Al ingresar un dígito par, deberías ver el mensaje “¡Has ganado con ‘bash if else’!” Por otro lado, al ingresar un dígito impar, deberías obtener la retroalimentación “¡Has perdido usando ‘bash if else’!”

Run the ‘bash if else’ game, bash_if_else_demo.sh Script

Para enriquecer el script ‘bash if else’, considera incorporar un segmento que determine si el usuario ingresa una letra o un carácter distinto en lugar de un número.

Decodificando las Sentencias ‘Bash If Else’ y ‘Case’

En este punto, has explorado un par de métodos para tomar decisiones en tus scripts de Bash, a saber, las sentencias ‘bash if else’. Pero Bash ofrece otra vía para la toma de decisiones: la sentencia case.

Similar al ‘bash if else’, la sentencia case es hábil para especificar secuencias de código a ejecutar basadas en condiciones especificadas. Una ventaja notable de la sentencia case es su concisión y claridad, especialmente cuando se compara con escenarios anidados de ‘bash if else’.

Para comprender completamente la alternativa de ‘bash if else’, profundicemos en la sintaxis de la declaración de caso:

  • case $VAR in – Este segmento de la construcción de casos evalúa la variable $VAR contra los patrones definidos hasta que se encuentre una coincidencia.
  • patrón1) y patrón2) – Estos son los criterios a probar, y una vez que se detecta una coincidencia, el código correspondiente (declaración1 o declaración2) entra en acción.
  • esac – Concluye la estructura de casos.
case $VAR in
pattern1)
    statement1
    ;;
pattern2)
    statement2
    ;;
esac

Imagina que estás diseñando un script de ‘bash if else’ donde los usuarios ingresan los nombres de sus países y, en respuesta, el script muestra el idioma predominante de ese país.

1. Comienza generando un archivo llamado bash_case_demo.sh.

nano bash_case_demo.sh

2. Incorpora el código de ‘bash if else’ proporcionado a continuación en tu archivo bash_case_demo.sh, luego guarda y sale.

El script de ‘bash if else’ resultante solicitará al usuario el nombre de su país y, según los patrones del ‘case’, imprimirá el idioma principal hablado en el país mencionado.

3#!/bin/bash
# Sondea al usuario con una pregunta sobre su país de residencia
echo -n "In which country do you reside?"
# Captura la respuesta del usuario.
read var
# Revela el idioma estándar en el país seleccionado por el usuario ($var),
# basándose en los patrones dentro de la estructura 'case'.
echo -n "The official language of $var is "

# La declaración 'bash if else' evalúa si la entrada del usuario ($var) se alinea con los patrones.
case $var in
# Establece patrones que revelan el idioma principal del país elegido por el usuario.
 US)
  echo -n "English"
  ;;

 Canada)
  echo -n "English and French"
  ;;

 Algeria | Bahrain | Egypt| Jordan)
  echo -n "Arabic"
  ;;

 *)
  echo -n "unknown"
  ;;
esac

3. Para experimentar este script ‘bash if else’ de primera mano, emplea el siguiente comando:

bash bash_case_demo.sh

Notarás que el script destaca con precisión el idioma según el país elegido por el usuario.

Si el país proporcionado no corresponde con los patrones establecidos, se activa el patrón predeterminado (*), resultando en la salida “desconocido”.

Illustrating the functionality of the bash_case_demo.sh Script

Conclusión de las Declaraciones Condicionales en Bash

En esta guía, has emprendido el viaje de comprender las declaraciones ‘if else’ y otras declaraciones condicionales en Bash. Desde la simple declaración ‘if’ hasta las intrincadas declaraciones ‘if-else’ y ‘case’, ahora cuentas con herramientas esenciales para el scripting efectivo en Bash.

Con estos fundamentos de ‘bash if else’ en tu haber, puedes construir scripts de Bash de manera más eficiente, reduciendo el margen de errores.

Pero recuerda, esto es apenas la punta del iceberg. Bash ofrece una amplia gama de declaraciones condicionales. Tal vez, considera adentrarte en la declaración elif de Bash y los operadores &&, OR y || para obtener una comprensión más profunda. ¡Con dedicación, dominar la escritura de scripts en Bash pronto estará al alcance!

Source:
https://adamtheautomator.com/bash-if-else/