📚 Módulo 3: Tomando decisiones con tu terminal¶
Duración estimada: según tu ritmo y experiencia.
Objetivo:
Dominar condicionales (if
, case
)
para tomar decisiones en scripts,
usar bucles (for
)
para repetir tareas,
y entender su aplicación técnica. 🎯
Prerrequisitos:
Haber completado los Módulos 1 y 2,
acceso a un sistema Linux, macOS o WSL
con una terminal y un editor de texto (nano
, vim
o VS Code).
Nota: El tiempo varía según tu nivel y dedicación; experimenta con cada ejemplo para dominar la lógica.
📖 Contenidos del Módulo¶
3.1. Condicionales: ¿Sí o no? 🔄¶
Teoría:
Los condicionales (if
) evalúan condiciones y ejecutan código según el resultado.
Usan operadores como =
(igual) o -gt
(mayor que).
Técnicamente, esto permite que los scripts tomen decisiones basadas en datos.
Práctica:
- Crea un script
decision.sh
:Escribe lo siguiente.nano decision.sh
- Añade un
if
básico y guarda (Ctrl+O, Enter, Ctrl+X):#!/bin/bash if [ 5 -gt 3 ] then echo "5 es mayor que 3" fi
[ ]
evalúa la condición;fi
cierra el bloque. - Dale permisos y ejecuta:
chmod +x decision.sh ./decision.sh
- Añade una condición con variable:
nano decision.sh numero=10 if [ $numero -gt 5 ] then echo "$numero es mayor que 5" fi ./decision.sh
- Incluye un
else
y prueba:nano decision.sh numero=2 if [ $numero -gt 5 ] then echo "$numero es mayor que 5" else echo "$numero es menor o igual" fi ./decision.sh
Dato curioso
Los condicionales son la base de la lógica en programación. 😄
3.2. Comparaciones avanzadas: Más opciones 🖌️¶
Teoría:
Los condicionales pueden usar múltiples condiciones con &&
(y) o ||
(o).
Operadores como -eq
(igual numérico) o -ne
(diferente) amplían las posibilidades.
Técnicamente, esto permite decisiones complejas.
Práctica:
- Crea un script
comparar.sh
:nano comparar.sh
- Añade una comparación numérica:
Guarda, da permisos y ejecuta.
#!/bin/bash a=5 b=5 if [ $a -eq $b ] then echo "Los números son iguales" fi
- Añade una condición con
&&
:nano comparar.sh a=10 b=5 if [ $a -gt $b ] && [ $a -lt 15 ] then echo "$a está entre 5 y 15" fi ./comparar.sh
- Usa
||
para una condición alternativa:nano comparar.sh if [ $a -eq 10 ] || [ $b -eq 10 ] then echo "Al menos uno es 10" fi ./comparar.sh
- Combina con variable de entrada:
nano comparar.sh read -p "Escribe un número: " num if [ $num -ge 0 ] && [ $num -le 10 ] then echo "Número válido" else echo "Número fuera de rango" fi ./comparar.sh
Consejo
Usa read
para pedir datos al usuario; siempre valida entradas. 💡
3.3. Case: Elige entre varias opciones 📜¶
Teoría:
case
evalúa una variable y ejecuta bloques según su valor.
Usa patrones como *
para casos genéricos.
Técnicamente, es una alternativa eficiente a múltiples if
.
Práctica:
- Crea un script
opciones.sh
:nano opciones.sh
- Añade un
case
básico:Guarda, da permisos y ejecuta.#!/bin/bash dia="lunes" case $dia in "lunes") echo "Inicio de semana" ;; "viernes") echo "Casi fin de semana" ;; *) echo "Otro día" ;; esac
- Modifica con una variable dinámica:
nano opciones.sh read -p "Dime un día: " dia case $dia in [Ll]unes) echo "¡A trabajar!" ;; [Vv]iernes) echo "¡Casi libre!" ;; *) echo "Día normal" ;; esac ./opciones.sh
- Añade más opciones:
nano opciones.sh case $dia in [Ll]unes|[Mm]artes) echo "Día laboral" ;; [Ss]abado|[Dd]omingo) echo "Fin de semana" ;; *) echo "Día normal" ;; esac ./opciones.sh
- Prueba con entrada inválida:
./opciones.sh # Escribe algo como "xyz" y observa
Advertencia
case
es sensible a mayúsculas; usa [Ll]
para incluir variantes. 🛑
3.4. Bucles: Repite como experto ⚙️¶
Teoría:
Los bucles for
repiten comandos para cada elemento en una lista.
Ejemplo: iterar sobre archivos.
Técnicamente, esto automatiza tareas repetitivas.
Práctica:
- Crea un script
repetir.sh
:nano repetir.sh
- Añade un bucle básico:
Guarda, da permisos y ejecuta.
#!/bin/bash for i in 1 2 3 do echo "Número: $i" done
- Itera sobre archivos:
nano repetir.sh for archivo in *.sh do echo "Procesando: $archivo" done ./repetir.sh
- Combina con variable:
nano repetir.sh total=0 for num in 1 2 3 4 do total=$((total + num)) done echo "Suma: $total" ./repetir.sh
- Usa un rango con
seq
:nano repetir.sh for i in $(seq 1 5) do echo "Iteración $i" done ./repetir.sh
Consejo
$(seq 1 5)
genera una secuencia; úsalo para rangos grandes. 💡
3.5. Depuración: Corrige tu lógica 🚀¶
Teoría:
Los errores en scripts se detectan con set -x
(traza) o bash -x
.
Técnicamente, esto ayuda a identificar dónde falla la lógica.
Práctica:
- Crea un script con error:
Ejecuta y observa el fallo.
nano error.sh #!/bin/bash a=5 if [ $a -gt 10 echo "Mayor" fi
- Activa trazas con
set -x
:nano error.sh #!/bin/bash set -x a=5 if [ $a -gt 10 ] then echo "Mayor" fi set +x chmod +x error.sh ./error.sh
- Corrige el error y prueba:
nano error.sh if [ $a -gt 10 ] then echo "Mayor" else echo "Menor" fi ./error.sh
- Usa
bash -x
desde la terminal:bash -x error.sh
- Crea un script con bucle y traza:
nano bucle.sh #!/bin/bash set -x for i in 1 2 3 do echo "Valor: $i" done set +x chmod +x bucle.sh ./bucle.sh
Consejo
Usa set -x
solo para depurar; desactívalo con set +x
. 💡
🛠️ Ejercicios prácticos¶
- Condicional:
- Crea un script que verifique si un número es mayor a 10.
- Case:
- Escribe un script que responda según el día de la semana.
- Bucle:
- Usa
for
para listar y contar archivos.txt
.
- Usa
- Combinación:
- Combina
if
yfor
para sumar números pares del 1 al 10.
- Combina
- Desafío:
- Crea un script que pida un número y use
case
para clasificarlo (bajo, medio, alto).
- Crea un script que pida un número y use
📝 Evaluación¶
Cuestionario corto (5 preguntas):
- ¿Qué hace un
if
en Bash? - ¿Cuál es la diferencia entre
&&
y||
? - ¿Para qué sirve el comando
case
? - ¿Cómo funciona un bucle
for
? - ¿Qué es
set -x
y para qué se usa?
Tarea práctica:
- Crea un script
control.sh
que:- Pida un número al usuario.
- Use
if
para verificar si es positivo. - Use
for
para sumar los números hasta ese valor. - Guarde el resultado en
suma.txt
.
- Entrega: Script,
suma.txt
y una nota con los pasos.
🎉 Recursos adicionales¶
- Documentación:
man test
,man bash
. - Enlaces:
- Guía de condicionales (detalles técnicos).
- Tutorial de bucles (ejemplos prácticos).
Tip
Practica combinando if
y for
para automatizar tareas. 💡
🚀 Siguientes pasos¶
¡Felicidades por completar el Módulo 3! En el Módulo 4, aprenderás a dominar texto y datos con herramientas avanzadas. ¡Sigue tomando el control! ✍️