Saltar a contenido

📚 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:

  1. Crea un script decision.sh:
    nano decision.sh
    
    Escribe lo siguiente.
  2. 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.
  3. Dale permisos y ejecuta:
    chmod +x decision.sh
    ./decision.sh
    
  4. 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
    
  5. 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:

  1. Crea un script comparar.sh:
    nano comparar.sh
    
  2. Añade una comparación numérica:
    #!/bin/bash
    a=5
    b=5
    if [ $a -eq $b ]
    then
        echo "Los números son iguales"
    fi
    
    Guarda, da permisos y ejecuta.
  3. 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
    
  4. 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
    
  5. 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:

  1. Crea un script opciones.sh:
    nano opciones.sh
    
  2. Añade un case básico:
    #!/bin/bash
    dia="lunes"
    case $dia in
        "lunes")
            echo "Inicio de semana"
            ;;
        "viernes")
            echo "Casi fin de semana"
            ;;
        *)
            echo "Otro día"
            ;;
    esac
    
    Guarda, da permisos y ejecuta.
  3. 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
    
  4. 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
    
  5. 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:

  1. Crea un script repetir.sh:
    nano repetir.sh
    
  2. Añade un bucle básico:
    #!/bin/bash
    for i in 1 2 3
    do
        echo "Número: $i"
    done
    
    Guarda, da permisos y ejecuta.
  3. Itera sobre archivos:
    nano repetir.sh
    for archivo in *.sh
    do
        echo "Procesando: $archivo"
    done
    ./repetir.sh
    
  4. 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
    
  5. 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:

  1. Crea un script con error:
    nano error.sh
    #!/bin/bash
    a=5
    if [ $a -gt 10
    echo "Mayor"
    fi
    
    Ejecuta y observa el fallo.
  2. 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
    
  3. Corrige el error y prueba:
    nano error.sh
    if [ $a -gt 10 ]
    then
        echo "Mayor"
    else
        echo "Menor"
    fi
    ./error.sh
    
  4. Usa bash -x desde la terminal:
    bash -x error.sh
    
  5. 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

  1. Condicional:
    • Crea un script que verifique si un número es mayor a 10.
  2. Case:
    • Escribe un script que responda según el día de la semana.
  3. Bucle:
    • Usa for para listar y contar archivos .txt.
  4. Combinación:
    • Combina if y for para sumar números pares del 1 al 10.
  5. Desafío:
    • Crea un script que pida un número y use case para clasificarlo (bajo, medio, alto).

📝 Evaluación

Cuestionario corto (5 preguntas):

  1. ¿Qué hace un if en Bash?
  2. ¿Cuál es la diferencia entre && y ||?
  3. ¿Para qué sirve el comando case?
  4. ¿Cómo funciona un bucle for?
  5. ¿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

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! ✍️