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.