Curso de Shell Scripting
El control de flujo permite que los scripts sean dinámicos: que tomen decisiones, ejecuten caminos diferentes y repitan tareas según condiciones.
5.1. Condiciones: [ ] vs [[ ]]
En Bash hay dos formas principales de comprobar condiciones.
| Sintaxis | Características principales |
|---|---|
[ ] | Tradicional, compatible con POSIX. Limitada. |
[[ ]] | Extensión de Bash, más potente y segura (recomendada en Bash). |
✅ Usa
[[ ]]siempre que trabajes en Bash moderno.
▸ Ejemplo básico
1X=10 2if [[ $X -gt 5 ]]; then 3 echo "X es mayor que 5" 4fi
Operadores comunes en comparaciones numéricas:
| Operador | Significado |
|---|---|
-eq | Igual a |
-ne | Distinto de |
-gt | Mayor que |
-lt | Menor que |
-ge | Mayor o igual que |
-le | Menor o igual que |
▸ Comparaciones de cadenas
1NOMBRE="Angel" 2 3if [[ $NOMBRE == "Angel" ]]; then 4 echo "Coincide" 5fi
Otros operadores:
!=→ distinto-z VAR→ cadena vacía-n VAR→ cadena no vacía
▸ Comprobación de archivos
1if [[ -f "mi_archivo.txt" ]]; then 2 echo "El archivo existe" 3fi
Operadores útiles:
-f→ existe y es archivo-d→ existe y es directorio-r→ se puede leer-w→ se puede escribir-x→ es ejecutable
5.2. Estructura completa if / elif / else
1#!/usr/bin/env bash 2set -Eeuo pipefail 3 4NUM=15 5 6if [[ $NUM -gt 20 ]]; then 7 echo "Mayor que 20" 8elif [[ $NUM -ge 10 ]]; then 9 echo "Entre 10 y 20" 10else 11 echo "Menor que 10" 12fi
Salida:
Entre 10 y 20
5.3. Sentencia case
Más clara que varios if cuando hay muchas opciones.
1#!/usr/bin/env bash 2 3read -p "Elige una opción (start/stop/restart): " OPCION 4 5case $OPCION in 6 start) 7 echo "Iniciando servicio..." 8 ;; 9 stop) 10 echo "Deteniendo servicio..." 11 ;; 12 restart) 13 echo "Reiniciando servicio..." 14 ;; 15 *) 16 echo "Opción no válida" 17 ;; 18esac
5.4. Bucles for
El bucle for itera sobre elementos de una lista.
▸ Iterar sobre lista de valores
1for i in 1 2 3 4 5; do 2 echo "Número: $i" 3done
▸ Iterar sobre archivos
1for archivo in *.txt; do 2 echo "Procesando $archivo" 3done
▸ Estilo C (con contador)
1for ((i=1; i<=5; i++)); do 2 echo "Iteración $i" 3done
5.5. Bucles while
Ejecuta mientras la condición sea verdadera.
1CONTADOR=1 2while [[ $CONTADOR -le 5 ]]; do 3 echo "Contador: $CONTADOR" 4 ((CONTADOR++)) 5done
5.6. Bucles until
Ejecuta hasta que la condición sea verdadera (inverso de while).
1X=1 2until [[ $X -gt 5 ]]; do 3 echo "X vale $X" 4 ((X++)) 5done
5.7. Lectura de datos con read
1read -p "Introduce tu nombre: " NOMBRE 2echo "Hola, $NOMBRE"
Opciones útiles:
-p→ mostrar mensaje-s→ entrada silenciosa (para contraseñas)-r→ desactiva interpretación de barras invertidas
5.8. Control del bucle: break y continue
1for i in {1..5}; do 2 if [[ $i -eq 3 ]]; then 3 echo "Saltando $i" 4 continue # Salta a la siguiente iteración 5 fi 6 if [[ $i -eq 5 ]]; then 7 echo "Rompiendo el bucle" 8 break # Termina el bucle 9 fi 10 echo "Número: $i" 11done
🏋️♂️ Ejercicio práctico 1
Crea un script llamado clasificar_edad.sh que:
-
Pida al usuario su edad.
-
Muestre:
<18 → Menor de edad18-64 → Adulto>=65 → Senior
Ejemplo:
Introduce tu edad: 20
Eres Adulto
🏋️♂️ Ejercicio práctico 2
Crea un script llamado buscador_logs.sh que:
- Pida al usuario un texto a buscar.
- Revise todos los archivos
.logen la carpeta actual. - Muestre cuántas veces aparece el texto en total.
- Si no encuentra coincidencias, muestre un mensaje adecuado.
Pistas:
- Usa
grep -cpara contar en cada archivo. - Usa un bucle
for.
🏋️♂️ Ejercicio práctico 3
Crea un script llamado menu.sh que use case para:
- Opción 1 → Listar archivos del directorio actual.
- Opción 2 → Mostrar el espacio libre en disco.
- Opción 3 → Salir.
- Loading...