Errores comunes en scripts de Bash y cómo evitarlos
El scripting en Bash es una herramienta esencial para la automatización, la administración de sistemas y la creación rápida de prototipos. Sin embargo, la flexibilidad y la poderosa simplicidad de Bash también pueden llevar a errores sutiles, vulnerabilidades de seguridad y problemas de portabilidad si no se siguen las mejores prácticas. Un script robusto debe manejar entradas inesperadas, gestionar errores con gracia y ser mantenible.
Esta guía completa explora los errores más comunes que se encuentran en el scripting de Bash, proporcionando soluciones prácticas, mejores prácticas modernas y ejemplos de código para ayudarle a escribir scripts seguros, fiables y eficientes.
1. Establecimiento de valores predeterminados de seguridad para el script
Muchos de los errores más perjudiciales provienen de fallos silenciosos. Al establecer opciones críticas al principio de su script, obliga a Bash a ser más riguroso y a detener la ejecución inmediatamente al encontrar errores.
Error: Ignorar fallos de comandos
Por defecto, Bash a menudo continúa ejecutando comandos subsiguientes incluso si un comando anterior en una tubería o secuencia falló (devolvió un estado de salida distinto de cero).
Solución: Habilitar la comprobación estricta de errores (set -e)
Usar set -e (errexit) asegura que el script salga inmediatamente si algún comando falla. Esto evita errores en cascada y la ejecución de comandos destructivos basados en datos erróneos.
#!/usr/bin/env bash
set -e # Salir inmediatamente si un comando termina con un estado distinto de cero.
# Ejemplo de dónde ayuda set -e:
mkdir /tmp/temp_dir_that_exists # Éxito (código de salida 0)
rm -rf non_existent_file # Fallo (código de salida > 0)
# Sin set -e, el script continúa aquí, potencialmente enmascarando el fallo.
# Con set -e, el script termina inmediatamente.
Error: Usar variables no inicializadas
Los errores tipográficos en los nombres de variables ($FIEL_NAME en lugar de $FILE_NAME) pueden hacer que las variables se expandan a una cadena vacía, causando consecuencias potencialmente catastróficas (por ejemplo, rm -rf / si una variable de ruta de directorio no está definida).
Solución: Requerir la inicialización de variables (set -u)
Usar set -u (nounset) asegura que el script termine inmediatamente si intenta usar una variable no inicializada.
#!/usr/bin/env bash
set -u
echo "El archivo es: $FILE_PATH"
# El script falla aquí si FILE_PATH no se definió previamente.
2. Errores de comillas y expansión de variables
Las variables sin comillas son, posiblemente, la mayor fuente de errores en los scripts, especialmente cuando se trata de nombres de archivo o rutas que contienen espacios.
Error: Olvidar poner comillas a las variables
Cuando una variable que contiene espacios no está entre comillas, Bash trata el valor de la variable como varios argumentos separados.
Solución: Poner siempre comillas dobles a las expansiones de variables
Use comillas dobles (`