Saltar a contenido

📚 Módulo 8: Maestría en Bash y más allá

Duración estimada: según tu ritmo y experiencia.

Objetivo: Optimizar el rendimiento de scripts, integrar Bash con Python, entender conceptos de DevOps, y experimentar con shells alternativas, alcanzando la maestría técnica. 🎯

Prerrequisitos: Haber completado los Módulos 1, 2, 3, 4, 5, 6 y 7, acceso a un sistema Linux, macOS o WSL con una terminal y un editor de texto (nano, vim o VS Code), y, si posible, Python instalado.

Nota: El tiempo varía según tu nivel y dedicación; explora cada tema a fondo para maximizar tu aprendizaje.


📖 Contenidos del Módulo

8.1. Optimización avanzada: Rendimiento máximo 🚀

Teoría:

Optimizar usa time para medir, evita subprocesos innecesarios. Técnicas como readarray aceleran bucles. Técnicamente, esto reduce latencia en scripts grandes.

Práctica:

  1. Mide un script lento:
    nano lento.sh
    #!/bin/bash
    for i in {1..10000}
    do
        echo $i
    done
    chmod +x lento.sh
    time ./lento.sh > /dev/null
    
  2. Optimiza con redirección externa:
    nano rapido.sh
    #!/bin/bash
    for i in {1..10000}
    do
        echo $i
    done > salida.txt
    time ./rapido.sh
    
  3. Usa readarray para arrays:
    nano array.sh
    #!/bin/bash
    readarray -t archivos < <(ls *.txt)
    for archivo in "${archivos[@]}"
    do
        echo "Procesando: $archivo"
    done
    chmod +x array.sh
    ./array.sh
    
  4. Evita comandos repetidos:
    nano optimo.sh
    #!/bin/bash
    lista=$(ls *.txt)
    for archivo in $lista
    do
        echo "Archivo: $archivo"
    done
    time ./optimo.sh
    
  5. Compara con time:
    time ./lento.sh
    time ./optimo.sh
    

Dato curioso

Optimizar scripts puede reducir tiempo de ejecución hasta un 90%. 😄

8.2. Integración con Python: Potencia combinada 🏗️

Teoría:

Bash puede llamar a scripts Python con ./script.py. Usa #!/usr/bin/env python3 para shebang. Técnicamente, esto combina la simplicidad de Bash con la potencia de Python.

Práctica:

  1. Crea un script Python básico:
    nano suma.py
    #!/usr/bin/env python3
    a = 5
    b = 3
    print(a + b)
    chmod +x suma.py
    ./suma.py
    
  2. Llama desde Bash:
    nano integra.sh
    #!/bin/bash
    resultado=$(./suma.py)
    echo "Suma desde Python: $resultado"
    chmod +x integra.sh
    ./integra.sh
    
  3. Pasa argumentos:
    nano suma.py
    import sys
    print(int(sys.argv[1]) + int(sys.argv[2]))
    nano integra.sh
    resultado=$(./suma.py 10 5)
    echo "Resultado: $resultado"
    ./integra.sh
    
  4. Combina con un bucle:
    nano integra.sh
    for i in 1 2 3
    do
        resultado=$(./suma.py $i 2)
        echo "Iteración $i: $resultado"
    done
    ./integra.sh
    
  5. Usa salida en un script complejo:
    nano asistente.sh
    #!/bin/bash
    total=$(./suma.py $(ls | wc -l) 5)
    echo "Archivos + 5: $total"
    ./asistente.sh
    

Consejo

Instala Python con sudo apt install python3 si no lo tienes. 💡

8.3. DevOps con Bash: Automatización profesional 🛡️

Teoría:

DevOps usa Bash para CI/CD (integración continua/despliegue). Ejemplo: scripts para despliegues o pruebas. Técnicamente, esto automatiza flujos en producción.

Práctica:

  1. Crea un script de despliegue simulado:
    nano deploy.sh
    #!/bin/bash
    echo "Desplegando versión $(date +%F)"
    cp *.sh /tmp/deploy/
    chmod +x /tmp/deploy/*.sh
    chmod +x deploy.sh
    ./deploy.sh
    ls /tmp/deploy
    
  2. Añade validación:
    nano deploy.sh
    if [ -d "/tmp/deploy" ]
    then
        cp *.sh /tmp/deploy/
    else
        echo "Directorio no encontrado" >&2
        exit 1
    fi
    ./deploy.sh
    
  3. Simula un pipeline:
    nano pipeline.sh
    #!/bin/bash
    echo "Paso 1: Compilar"
    sleep 1
    echo "Paso 2: Probar"
    ./test.sh || { echo "Fallo en pruebas" >&2; exit 1; }
    echo "Paso 3: Desplegar"
    ./deploy.sh
    chmod +x pipeline.sh
    ./pipeline.sh
    
  4. Crea un test.sh simple:
    nano test.sh
    #!/bin/bash
    echo "Prueba exitosa"
    chmod +x test.sh
    
  5. Ejecuta y ajusta:
    ./pipeline.sh
    # Modifica test.sh para fallar y observa
    

Advertencia

En DevOps real, usa herramientas como Jenkins; esto es una simulación. 🛑

8.4. Shells alternativas: Zsh y Fish 📜

Teoría:

Zsh ofrece autocompletado avanzado; Fish prioriza facilidad. Se instalan con sudo apt install zsh o fish. Técnicamente, esto amplía tus opciones de entorno.

Práctica:

  1. Instala Zsh:
    sudo apt install zsh
    zsh --version
    
  2. Prueba Zsh:
    zsh
    # Escribe algunos comandos, usa Tab para autocompletar
    exit
    
  3. Configura Zsh (opcional):
    sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
    # Sigue las instrucciones
    zsh
    
  4. Instala Fish:
    sudo apt install fish
    fish
    # Prueba comandos, nota la sintaxis amigable
    exit
    
  5. Compara con Bash:
    bash
    echo $SHELL
    fish
    echo $SHELL
    exit
    

Consejo

Usa chsh -s /bin/zsh para cambiar tu shell predeterminada. 💡

8.5. Reflexión y maestría: Tu camino adelante 🚀

Teoría:

La maestría implica integrar conocimientos y explorar. Recursos como Stack Overflow o GitHub amplían habilidades. Técnicamente, esto te prepara para desafíos profesionales.

Práctica:

  1. Revisa un script anterior:
    nano asistente.sh
    # Modifica y optimiza según lo aprendido
    
  2. Crea un repositorio (opcional):
    git init
    git add .
    git commit -m "Mi curso de Bash"
    
  3. Explora un tema avanzado:
    man bash | grep "advanced"
    # Lee secciones sugeridas
    
  4. Busca inspiración:
    curl -s https://api.github.com/search/repositories?q=bash+script | jq '.items[0].html_url'
    
  5. Comparte tu proyecto:
    # Sube a GitHub o comparte con otros (manual)
    

Consejo

Únete a comunidades como r/bash para seguir aprendiendo. 💡


🛠️ Ejercicios prácticos

  1. Optimización:
    • Optimiza un script anterior con readarray.
  2. Python:
    • Llama un script Python desde Bash con argumentos.
  3. DevOps:
    • Simula un pipeline con tres pasos.
  4. Shells:
    • Instala Zsh y personaliza un comando.
  5. Desafío:
    • Crea un script que combine Bash, Python y cron para un tarea automatizada.

📝 Evaluación

Cuestionario corto (5 preguntas):

  1. ¿Cómo optimizas un script en Bash?
  2. ¿Cómo integra Bash con Python?
  3. ¿Qué rol juega Bash en DevOps?
  4. ¿Cuál es la ventaja de Zsh sobre Bash?
  5. ¿Dónde encuentras recursos para seguir aprendiendo?

Tarea práctica:

  • Crea un script maestria.sh que:
    • Optimice un bucle con readarray.
    • Llame un script Python para un cálculo.
    • Simule un paso de DevOps.
    • Use Zsh para ejecutar un comando.
  • Entrega: Script, log, y una nota con tu reflexión sobre el curso.

🎉 Recursos adicionales

Tip

Sigue practicando y comparte tus scripts para crecer. 💡


🚀 Siguientes pasos

¡Enhorabuena por completar el Curso de Bash: de 0 a experto! 🧙‍♂️ Has dominado la terminal y automatización. Ahora, aplica tus habilidades en proyectos reales, explora más herramientas y sigue brillando. ¡Gracias por este viaje! ✍️