Apuntes sobre Bash

No es un bug, es una característica del shell.

Estructuras de Control de Flujo en Bash

Condicionales: if, elif, else

Las estructuras condicionales if permiten ejecutar comandos solo si se cumple una condición. La sintaxis básica es if, seguida de then, y se cierra con fi. Puedes usar elif para condiciones adicionales y else para un caso por defecto.

Ejemplo:

#!/bin/bash
read -p "Ingresa un número: " NUM
if [ $NUM -gt 10 ]; then
    echo "El número es mayor que 10"
elif [ $NUM -eq 10 ]; then
    echo "El número es igual a 10"
else
    echo "El número es menor que 10"
fi

Nota: Los corchetes [ ] son el comando test. Usa operadores como -gt (mayor que), -eq (igual), -lt (menor que). Deja espacios dentro de los corchetes y encierra las variables entre comillas dobles ("$NUM") para evitar problemas con valores vacíos o espacios.

Bucles: for, while, until, select

Los bucles permiten repetir comandos múltiples veces. Bash ofrece cuatro tipos principales:

  • for: Itera sobre una lista de elementos.
  • while: Repite mientras una condición sea verdadera.
  • until: Repite hasta que una condición sea verdadera.
  • select: Crea un menú interactivo para seleccionar opciones.

Ejemplo de for:

#!/bin/bash
for i in 1 2 3 4 5
do
    echo "Iteración $i"
done

Puedes iterar sobre cualquier cosa, no solo números:

#!/bin/bash
for fruta in manzana pera uva
do
    echo "Me gusta la $fruta"
done

o sobre salida de comandos:

#!/bin/bash
        # Itera sobre cada archivo en el directorio actual
        for archivo in $(ls)
        do
        echo "Procesando $archivo"
        done
        

Ejemplo de while:

si vienes de otros lenguajes de programación, bash también admite una iteración mas clásica:

#!/bin/bash
# Sintaxis C-style for loop
for (( i=1; i<=5; i++ ))
do
    echo "Contador C-style: $i"
done

Ejemplo de while:

#!/bin/bash
CONTADOR=1
while [ $CONTADOR -le 5 ]
do
    echo "Contador: $CONTADOR"
    ((CONTADOR++))
done

Ejemplo de until:

#!/bin/bash
CONTADOR=1
until [ "$CONTADOR" -gt 5 ]
do
    echo "Contador: $CONTADOR"
    ((CONTADOR++))
done

Ejemplo de select:

#!/bin/bash
echo "Elige una opción:"
select OPCION in "Opción 1" "Opción 2" "Salir"
do
    case $OPCION in
        "Opción 1")
            echo "Seleccionaste: Opción 1"
            ;;
        "Opción 2")
            echo "Seleccionaste: Opción 2"
            ;;
        "Salir")
            echo "Saliendo..."
            break # Sale del bucle select
            ;;
        *) # Caso por defecto para entradas inválidas
            echo "Opción inválida. Intenta de nuevo."
            ;;
    esac
done

Nota: Usa break para salir de un bucle y continue para saltar a la siguiente iteración.

La instrucción case

La instrucción case evalúa una variable y ejecuta comandos según su valor, siendo una alternativa más clara a múltiples if. Se cierra con esac.

Ejemplo:

#!/bin/bash
read -p "Ingresa un día de la semana: " DIA
case $DIA in
    "lunes"|"Lunes")
        echo "¡Es el inicio de la semana!"
        ;;
    "viernes"|"Viernes")
        echo "¡Casi fin de semana!"
        ;;
    *)
        echo "Otro día de la semana"
        ;;
esac

Nota: Usa ) para cerrar cada caso, ;; para separar casos y *) para el caso por defecto. Puedes usar patrones (lunes|Lunes) para mayor flexibilidad.

Bucles infinitos: En cualquier bucle asegúrate de que la condición de salida llegue a cumplirse. Si la variable de control nunca cambia, el script se quedará colgado consumiendo recursos indefinidamente.

En la próxima lección: funciones en Bash: definición, parámetros, variables locales y valores de retorno.

TOP