Capítulo 6.3 - Estructuras de Control
Objetivos de Aprendizaje
Al final de este capítulo, usted será capaz de:
- Utilizar condiciones if/else
- Implementar bucles for y while
- Utilizar case para selección múltiple
- Comprender los operadores de prueba
- Gestionar errores
Condiciones if/else
Sintaxis Básica
#!/bin/bash
# if simple
if [ condition ]; then
comandos
fi
# if/else
if [ condition ]; then
comandos_si_verdadero
else
comandos_si_falso
fi
# if/elif/else
if [ condition1 ]; then
comandos1
elif [ condition2 ]; then
comandos2
else
comandos3
fi
Operadores de Prueba
Archivos:
[ -f archivo ] # El archivo existe y es regular
[ -d directorio ] # El directorio existe
[ -e ruta ] # La ruta existe
[ -r archivo ] # Legible
[ -w archivo ] # Escritura
[ -x archivo ] # Ejecutable
[ -s archivo ] # No vacío
Cadenas:
[ -z "$VAR" ] # Vacía
[ -n "$VAR" ] # No vacía
[ "$VAR1" = "$VAR2" ] # Igual
[ "$VAR1" != "$VAR2" ] # Diferente
Números:
[ $A -eq $B ] # Igual
[ $A -ne $B ] # Diferente
[ $A -lt $B ] # Menor
[ $A -le $B ] # Menor o igual
[ $A -gt $B ] # Mayor
[ $A -ge $B ] # Mayor o igual
Lógica:
[ condition1 ] && [ condition2 ] # Y
[ condition1 ] || [ condition2 ] # O
[ ! condition ] # NO
Ejemplos
#!/bin/bash
# Verificar archivo
if [ -f "/etc/passwd" ]; then
echo "El archivo existe"
else
echo "El archivo no existe"
fi
# Verificar usuario
if [ "$USER" = "root" ]; then
echo "Usted es root"
elif [ "$UID" -eq 0 ]; then
echo "Usted es root (por UID)"
else
echo "Usted es $USER"
fi
# Condiciones múltiples
if [ -f "$1" ] && [ -r "$1" ]; then
echo "El archivo existe y es legible"
fi
Bucle for
Sintaxis
#!/bin/bash
# Lista de valores
for item in valor1 valor2 valor3; do
echo "Ítem: $item"
done
# Recorrer argumentos
for arg in "$@"; do
echo "Argumento: $arg"
done
# Secuencia numérica
for i in {1..10}; do
echo "Número: $i"
done
# Con incremento
for i in {1..10..2}; do
echo "Número: $i"
done
# Estilo C
for ((i=1; i<=10; i++)); do
echo "Número: $i"
done
Ejemplos
#!/bin/bash
# Recorrer archivos
for archivo in *.txt; do
echo "Procesando: $archivo"
# Procesamiento...
done
# Recorrer directorios
for dir in /home/*; do
if [ -d "$dir" ]; then
echo "Directorio: $dir"
fi
done
# Recorrer arreglo
FRUTAS=("manzana" "banana" "naranja")
for fruta in "${FRUTAS[@]}"; do
echo "Fruta: $fruta"
done
Bucle while
Sintaxis
#!/bin/bash
# while simple
while [ condition ]; do
comandos
done
# while con lectura
while read linea; do
echo "Línea: $linea"
done < archivo.txt
# while infinito
while true; do
comandos
sleep 1
done
Ejemplos
#!/bin/bash
# Contador
i=1
while [ $i -le 10 ]; do
echo "Número: $i"
i=$((i + 1))
done
# Leer archivo línea por línea
while IFS= read -r linea; do
echo "Línea: $linea"
done < /etc/passwd
# Menú interactivo
while true; do
echo "1. Opción 1"
echo "2. Opción 2"
echo "3. Salir"
read -p "Elección: " eleccion
case $eleccion in
1) echo "Opción 1" ;;
2) echo "Opción 2" ;;
3) break ;;
*) echo "Elección inválida" ;;
esac
done
Bucle until
#!/bin/bash
# until (hasta que la condición sea verdadera)
i=1
until [ $i -gt 10 ]; do
echo "Número: $i"
i=$((i + 1))
done
case - Selección Múltiple
Sintaxis
#!/bin/bash
case $variable in
pattern1)
comandos1
;;
pattern2)
comandos2
;;
pattern3|pattern4)
comandos3
;;
*)
comandos_por_defecto
;;
esac
Ejemplos
#!/bin/bash
# Menú simple
read -p "Elección (1-3): " eleccion
case $eleccion in
1)
echo "Opción 1 seleccionada"
;;
2)
echo "Opción 2 seleccionada"
;;
3)
echo "Opción 3 seleccionada"
;;
*)
echo "Elección inválida"
exit 1
;;
esac
# Patrones con comodines
case "$1" in
start)
echo "Inicio"
;;
stop)
echo "Detención"
;;
restart|reload)
echo "Reinicio"
;;
*)
echo "Uso: $0 {start|stop|restart}"
exit 1
;;
esac
Control de Flujo
break y continue
#!/bin/bash
# break: Salir del bucle
for i in {1..10}; do
if [ $i -eq 5 ]; then
break
fi
echo $i
done
# continue: Pasar a la siguiente iteración
for i in {1..10}; do
if [ $i -eq 5 ]; then
continue
fi
echo $i
done
exit
#!/bin/bash
# exit: Salir del script
if [ ! -f "$1" ]; then
echo "Error: Archivo no encontrado"
exit 1
fi
# Código de retorno
exit 0 # Éxito
exit 1 # Error general
exit 2 # Error específico
Ejemplo Completo
#!/bin/bash
# Script de procesamiento de archivos
# Verificar argumentos
if [ $# -eq 0 ]; then
echo "Uso: $0 ARCHIVO..."
exit 1
fi
# Procesar cada archivo
for archivo in "$@"; do
# Verificar existencia
if [ ! -f "$archivo" ]; then
echo "Advertencia: $archivo no existe, ignorado"
continue
fi
# Verificar permisos
if [ ! -r "$archivo" ]; then
echo "Error: $archivo no es legible"
continue
fi
# Procesamiento según extensión
case "$archivo" in
*.txt)
echo "Procesando texto: $archivo"
# Procesamiento...
;;
*.log)
echo "Procesando log: $archivo"
# Procesamiento...
;;
*)
echo "Tipo no soportado: $archivo"
;;
esac
done
echo "Procesamiento terminado"
Resumen
En este capítulo, usted ha aprendido:
if/else: Condiciones con operadores de prueba
for: Bucles con listas, secuencias, arreglos
while: Bucles condicionales, lectura de archivos
case: Selección múltiple con patrones
Control: break, continue, exit
Operadores: Archivos, cadenas, números, lógica
Próximos Pasos
Capítulo 6.4: Funciones y Cron
Módulo 7: Red y Configuración
Capítulo creado el: Diciembre 2024