[[hack_roadmap-0|Up]]
====== Bash Scripting Avanzado ======
El scripting en Bash es una habilidad fundamental para administradores de
sistemas y desarrolladores que trabajan en entornos Unix/Linux. Los scripts Bash
permiten automatizar tareas, gestionar sistemas, procesar datos y mucho más. El
scripting avanzado en Bash incluye el uso de estructuras de control, funciones,
manejo de errores, y técnicas para mejorar la eficiencia y seguridad de los
scripts.
===== Estructuras de Control Avanzadas =====
==== Conceptos Clave ====
* **Bucles y Condicionales:** Permiten ejecutar bloques de código repetidamente o bajo ciertas condiciones.
* **Casos y Selectores:** Facilitan la toma de decisiones basada en múltiples condiciones.
==== Ejemplos y Tareas Comunes ====
* **Bucles For y While:**
# Bucle for
for i in {1..10}; do
echo "Número $i"
done
# Bucle while
count=1
while [ $count -le 10 ]; do
echo "Número $count"
((count++))
done
* **Condicionales If-Else:**
if [ -d "/etc" ]; then
echo "El directorio /etc existe"
else
echo "El directorio /etc no existe"
fi
* **Selectores Case:**
read -p "Ingrese una opción (1-3): " option
case $option in
1)
echo "Opción 1 seleccionada"
;;
2)
echo "Opción 2 seleccionada"
;;
3)
echo "Opción 3 seleccionada"
;;
*)
echo "Opción inválida"
;;
esac
==== Recursos ====
* [[https://tldp.org/LDP/abs/html/|Advanced Bash-Scripting Guide]]
===== Funciones en Bash =====
==== Conceptos Clave ====
* **Funciones:** Bloques de código reutilizables que pueden ser llamados con diferentes parámetros.
==== Ejemplos y Tareas Comunes ====
* **Definir y Llamar Funciones:**
function saludo {
echo "Hola, $1"
}
saludo "Mundo"
* **Funciones con Retorno de Valores:**
function suma {
local resultado=$(( $1 + $2 ))
echo $resultado
}
resultado=$(suma 3 5)
echo "La suma es $resultado"
==== Recursos ====
* [[https://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO-8.html|Bash Functions]]
===== Manejo de Errores y Depuración =====
==== Conceptos Clave ====
* **Gestión de Errores:** Controlar y gestionar errores durante la ejecución del script.
* **Depuración:** Técnicas para identificar y corregir errores en los scripts.
==== Ejemplos y Tareas Comunes ====
* **Manejo de Errores con set:**
set -e # Salir del script si ocurre un error
set -u # Tratar variables no definidas como errores
set -o pipefail # Considerar fallos en cualquier comando de un pipeline
# Comandos que pueden generar errores
cp archivo_inexistente.txt /destino/
* **Depuración de Scripts:**
bash -x script.sh # Ejecutar el script en modo depuración
# Insertar puntos de depuración
set -x # Habilitar depuración
echo "Depuración activada"
set +x # Deshabilitar depuración
==== Recursos ====
* [[https://tldp.org/LDP/abs/html/exit-status.html|Bash Error Handling]]
* [[https://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html|Bash Debugging]]
===== Procesamiento de Texto y Datos =====
==== Conceptos Clave ====
* **Herramientas de Procesamiento:** Utilización de ''awk'', ''sed'', y otras utilidades para manipular texto y datos.
==== Ejemplos y Tareas Comunes ====
* **Uso de ''awk'':**
# Imprimir la primera columna de un archivo
awk '{print $1}' archivo.txt
# Calcular la suma de la segunda columna
awk '{sum += $2} END {print sum}' archivo.txt
* **Uso de ''sed'':**
# Sustituir "foo" por "bar" en un archivo
sed 's/foo/bar/g' archivo.txt
# Eliminar líneas que contienen "error"
sed '/error/d' archivo.txt
==== Recursos ====
* [[https://www.gnu.org/software/gawk/manual/gawk.html|AWK User Guide]]
* [[https://www.gnu.org/software/sed/manual/sed.html|SED User Guide]]
===== Automatización y Programación de Tareas =====
==== Conceptos Clave ====
* **Cron Jobs:** Programar tareas periódicas.
* **At Jobs:** Programar tareas para una sola vez en el futuro.
==== Ejemplos y Tareas Comunes ====
* **Configuración de Cron Jobs:**
# Editar cron jobs para el usuario actual
crontab -e
# Ejemplo de cron job: Ejecutar script cada día a las 2 AM
0 2 * * * /ruta/a/mi_script.sh
* **Uso de ''at'':**
# Programar un script para ejecutarse mañana a las 3 PM
echo "/ruta/a/mi_script.sh" | at 3pm tomorrow
==== Recursos ====
* [[https://crontab.guru/|Crontab Guru]]
* [[https://man7.org/linux/man-pages/man1/at.1.html|At Command User Guide]]
===== Mejores Prácticas y Eficiencia =====
==== Conceptos Clave ====
* **Escritura de Código Limpio:** Uso de comentarios, nombres de variables descriptivos y estructura clara.
* **Optimización:** Reducción del uso de recursos y aumento de la velocidad de ejecución.
==== Ejemplos y Tareas Comunes ====
* **Código Limpio:**
# Ejemplo de script con buenos comentarios y estructura
# Este script copia archivos de un directorio a otro
origen="/ruta/al/origen"
destino="/ruta/al/destino"
# Verificar que el directorio de destino existe
if [ ! -d "$destino" ]; then
echo "El directorio de destino no existe, creando..."
mkdir -p "$destino"
fi
# Copiar archivos
cp -r "$origen"/* "$destino"/
* **Optimización de Scripts:**
# Uso de arrays para manejar listas de elementos
elementos=("uno" "dos" "tres")
for elemento in "${elementos[@]}"; do
echo "Procesando $elemento"
done
===== Conclusión =====
El scripting avanzado en Bash permite a los administradores y desarrolladores
aprovechar al máximo las capacidades de automatización y gestión de sistemas.
Desde el uso de estructuras de control complejas y funciones reutilizables hasta
el manejo de errores y la optimización de scripts, estas técnicas son esenciales
para crear scripts robustos y eficientes. Los recursos proporcionados ofrecen
guías detalladas para profundizar en cada uno de estos aspectos y mejorar tus
habilidades en Bash scripting.
===== Recursos Adicionales =====
* [[https://google.github.io/styleguide/shellguide.html|Google Shell Style Guide]]
* [[https://tldp.org/LDP/abs/html/|Advanced Bash-Scripting Guide]] (The Linux Documentation Project)