Estructuras de Control de Flujo en Bash
Condicionales: if, then, elif, else, fi
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 un comando de prueba (test
). Usa operadores como -gt
(mayor que), -eq
(igual), -lt
(menor que), y deja espacios dentro de los corchetes. Encierra las variables entre comillas dobles (por ejemplo, "$NUM") para evitar problemas si la variable está vacía o contiene 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 (como lunes|Lunes
) para mayor flexibilidad.
Insistir, no ya en bash, sino en cualquier lenguaje de programación, que es esencial que cualquier bucle que escribas tenga una condición de salida bien definida. Si un bucle nunca alcanza una condición que lo termine, se convertirá en un bucle infinito. Esto hará que tu script se quede "colgado" o consuma recursos de forma indefinida. Específicamente, asegúrate de que la condición que controla el bucle eventualmente se vuelva falsa (en el caso de while
) o verdadera (en el caso de until
). Esto implica que alguna variable o estado dentro del bucle debe cambiar con cada iteración.