CodeGym /Cursos /Docker SELF /Condiciones (`if`, `else`) y bucles (`for`, `while`) en b...

Condiciones (`if`, `else`) y bucles (`for`, `while`) en bash

Docker SELF
Nivel 3 , Lección 4
Disponible

Condiciones if, else y bucles for, while en bash

1. Condicionales en bash: if, else, y un poco de magia

¿Para qué sirven los condicionales?

Los condicionales permiten que tu script tome decisiones basadas en datos de entrada, variables o incluso resultados de ejecución de comandos. Por ejemplo, quieres verificar si existe un archivo o asegurarte de que un servidor está disponible antes de realizar la siguiente acción. Aquí es donde entra la construcción if.

Sintaxis básica

Así es como se ve un clásico condicional if en bash:

if [ condición ]; then
    # Aquí se ejecuta el código si la condición es verdadera
    echo "¡Condición cumplida!"
else
    # Aquí se ejecuta el código si la condición es falsa
    echo "¡Condición no cumplida!"
fi

Palabras clave:

  • if, then, else, y fi (cierra el bloque if) — son palabras mágicas. Sin ellas, el script no funcionará.
  • Los corchetes [ ... ] se usan para verificar condiciones.

Ejemplo 1: Verificar existencia de un archivo

#!/bin/bash

FILE="/etc/passwd"

if [ -f $FILE ]; then
    echo "El archivo $FILE existe."
else
    echo "El archivo $FILE no se encuentra."
fi

Explicación:

  • -f verifica si el archivo existe.
  • Si el archivo existe, el comando echo imprime un mensaje al respecto. Si no, se ejecuta el bloque else.

Condicionales con comandos

Puedes usar el resultado de la ejecución de un comando como condición, ya que en Linux todo es un comando.

Ejemplo 2: Verificar disponibilidad de un sitio web

#!/bin/bash

if ping -c 1 example.com &> /dev/null; then
    echo "El sitio web está disponible."
else
    echo "El sitio web no está disponible."
fi

Explicación:

  • ping -c 1 envía una solicitud al servidor. Si responde, la condición se cumple.
  • &> /dev/null oculta la salida del comando para no saturar la terminal.

Usando el operador elif

A veces, no basta solo con if y else. Necesitas considerar múltiples condiciones. Aquí es donde entra elif.

Ejemplo 3: Determinar la hora del día

#!/bin/bash

HOUR=$(date +%H)

if [ $HOUR -lt 12 ]; then
    echo "¡Buenos días!"
elif [ $HOUR -lt 18 ]; then
    echo "¡Buenas tardes!"
else
    echo "¡Buenas noches!"
fi

Explicación:

  • date +%H devuelve la hora actual en formato de 24 horas.
  • Comparamos la hora actual con valores fijos: si es menor a 12 — mañana, menor a 18 — tarde, de lo contrario — noche.

2. Bucles en bash: la repetición es la madre del aprendizaje

Los bucles son una manera de hacer que tu script repita acciones mientras se cumpla una condición específica. Esto es especialmente útil si necesitas procesar muchos archivos, repetir tareas varias veces o esperar a que ocurra un evento.

Bucle for

for recorre una lista de valores (por ejemplo, archivos o números) y ejecuta una acción para cada uno de ellos.

Ejemplo 4: Un bucle for sencillo

#!/bin/bash

for i in {1..5}; do
    echo "Esta es la iteración número $i"
done

Explicación:

  • {1..5} — lista de números del 1 al 5.
  • En cada iteración, la variable i toma un valor de la lista.

Ejemplo 5: Recorrer archivos en un directorio

#!/bin/bash

for FILE in /etc/*; do
    echo "Procesando archivo: $FILE"
done

Explicación:

  • /etc/* — esta es la lista de todos los archivos en la carpeta /etc.
  • En cada iteración, la variable FILE contiene el nombre de un archivo.

Bucle while

while ejecuta acciones mientras se cumpla una condición.

Ejemplo 6: Adivina el número

#!/bin/bash

SECRET=5
GUESS=0

while [ $GUESS -ne $SECRET ]; do
    echo "Introduce tu suposición (un número del 1 al 10):"
    read GUESS
done

echo "¡Has acertado!"

Explicación:

  • [ $GUESS -ne $SECRET ] — la condición continúa mientras el número introducido GUESS no sea igual al número secreto SECRET.

Combinando bucles y condiciones

A veces, las condiciones y los bucles trabajan juntos.

Ejemplo 7: Verificando varios sitios web

#!/bin/bash

SITES=("example.com" "google.com" "nonexistent.website")

for SITE in ${SITES[@]}; do
    if ping -c 1 $SITE &> /dev/null; then
        echo "$SITE está disponible."
    else
        echo "$SITE no está disponible."
    fi
done

Explicación:

  • El array SITES contiene una lista de sitios web.
  • for recorre cada sitio web de la lista.
  • if verifica si el sitio web está disponible utilizando ping.

3. Ejercicios prácticos

Comprobación de dominio

Escribe un script que tome un nombre de dominio como argumento y verifique su disponibilidad.

Pista:

if ping -c 1 $1 &> /dev/null; then
    echo "Dominio disponible."
else
    echo "Dominio no disponible."
fi

Trabajo con archivos

Escribe un script que verifique la existencia de varios archivos y muestre el resultado para cada uno de ellos.

Pista:

FILES=("file1.txt" "file2.txt" "/etc/passwd")
for FILE in ${FILES[@]}; do
    if [ -f $FILE ]; then
        echo "$FILE existe."
    else
        echo "$FILE no encontrado."
    fi
done

Tabla de multiplicar

Escribe un script con bucles anidados que muestre la tabla de multiplicar para números del 1 al 10.

Pista:

for i in {1..10}; do
    for j in {1..10}; do
        echo -n "$((i * j)) "
    done
    echo ""
done

Ahora puedes añadir inteligencia y lógica a tus scripts en bash. Los condicionales te permitirán verificar estados y tomar decisiones, mientras que los bucles te ayudarán a automatizar tareas repetitivas. ¡Te esperan aún más posibilidades para automatizar tareas!

Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION