Linux · Sección 15

Bash robusto y comprobable

Errores explícitos, temporales, movimientos atómicos, getopts, señales, limpieza, ShellCheck y pruebas con entradas adversas.

3
lecciones
3
ejercicios resueltos
CONTENIDO ORIGINAL

Avanza en orden. Cada lección está redactada para Palta es Cool, utiliza ejemplos propios y termina con una actividad cuya respuesta puedes desplegar.

ANTES DE EMPEZAR

Ubícate antes de avanzar

01 / PUNTO DE PARTIDA

Necesitas variables, condiciones, bucles y funciones de la sección anterior.

02 / META OBSERVABLE

Al terminar deberías poder relacionar Errores y temporales con Opciones y señales y resolver un caso nuevo.

03 / TIEMPO SUGERIDO

Reserva entre 75 y 120 minutos o divide el laboratorio en dos sesiones.

04 / PREPARA EL LABORATORIO

Prepara una máquina virtual Linux con red NAT e instantáneas, o WSL para las prácticas que no requieren kernel y systemd completos.

Abrir la guía de herramientas →
Diagnóstico rápido: ¿cómo se relacionan Errores y temporales y Opciones y señales? +

No necesitas acertar todavía. Escribe una hipótesis de dos líneas y compárala con tu respuesta al finalizar; si puedes corregirla y justificar el cambio, hubo aprendizaje.

Ruta guiada · 3 lecciones

Aprende el tema paso a paso

Harás scripts resistentes a entradas extrañas, fallos parciales, señales y temporales, usando pruebas y análisis estático sin convertir set -e en magia.

Al terminar podrás
  • Modo estricto ayuda, pero no reemplaza diseño
  • getopts y trap definen una interfaz controlada
  • ShellCheck, pruebas y fixtures descubren supuestos
01
Fallos explícitos

Modo estricto ayuda, pero no reemplaza diseño

set -u detecta variables no definidas; pipefail conserva fallos de tuberías; -e tiene excepciones contextuales y puede terminar en lugares sorprendentes. Comprueba fallos esperables con if, && u ||, entrega mensajes útiles y decide qué puede reintentarse.

01

Usa ${variable-} cuando la ausencia es válida.

02

Captura el estado inmediatamente después de la operación relevante.

03

Un error silencioso no se vuelve correcto por continuar.

Comprueba lo aprendido · 01

¿Por qué set -e no sustituye a comprobar una operación crítica?

Mostrar respuesta +

Porque su comportamiento depende del contexto sintáctico y no aporta recuperación ni mensaje de dominio. Una operación crítica necesita una decisión explícita.

02
Opciones y señales

getopts y trap definen una interfaz controlada

getopts analiza opciones cortas sin reimplementar el parser. Después de desplazar OPTIND quedan argumentos posicionales. trap ejecuta limpieza o marca cancelación ante señales; no puede capturar SIGKILL. La limpieza debe ser idempotente y usar rutas creadas por el propio script.

01

Una opción inválida devuelve uso y estado 2.

02

INT y TERM merecen una salida ordenada.

03

EXIT centraliza limpieza normal y por error.

Comprueba lo aprendido · 02

¿Qué debe hacer un trap de limpieza si se ejecuta dos veces?

Mostrar respuesta +

Seguir siendo seguro: comprobar o usar operaciones tolerantes para no borrar rutas ajenas ni convertir la limpieza en un nuevo fallo grave.

03
Calidad comprobable

ShellCheck, pruebas y fixtures descubren supuestos

bash -n detecta errores de sintaxis y ShellCheck señala expansiones sin comillas, pipelines frágiles y construcciones no portables. Las pruebas deben incluir nombres con espacios, guiones, comodines, entrada vacía, permisos denegados y órdenes que fallan. Un directorio temporal aislado evita tocar archivos reales.

01

Prueba estados de salida además del texto.

02

Compara resultados sin depender del orden cuando el contrato no lo promete.

03

Usa una shell explícita si buscas portabilidad POSIX.

Comprueba lo aprendido · 03

¿Qué caso pequeño revela muchos errores de quoting en Bash?

Mostrar respuesta +

Una ruta que contiene espacios, un salto de línea o caracteres de glob como *; obliga a comprobar si cada argumento conserva sus límites.

Resumen de la sección

Tu recorrido en tres ideas

  1. Modo estricto ayuda, pero no reemplaza diseño
  2. getopts y trap definen una interfaz controlada
  3. ShellCheck, pruebas y fixtures descubren supuestos
PROFUNDIZACIÓN / LABORATORIO GUIADO

Entrega una herramienta de informes resistente

Integra quoting, argumentos, temporales, señales, estados, análisis estático y pruebas adversas en una utilidad reusable.

CASO

El script actual rompe rutas con espacios, deja temporales al cancelar y reemplaza el informe anterior cuando una etapa falla.

Procedimiento

  1. Define contrato, opciones y códigos de salida.
  2. Construye en temporal, valida y mueve de forma atómica; limpia con trap.
  3. Ejecuta bash -n, ShellCheck y una matriz de entradas adversas.

Evidencia mínima

  • Ayuda y contrato reproducibles.
  • Informe anterior intacto tras fallo.
  • Pruebas para espacios, guiones, vacío y permiso denegado.
Mostrar razonamiento modelo +

Los datos viajan en arrays o argumentos citados. La salida solo reemplaza el destino después de validar. Diagnóstico y datos permanecen separados.

Para ir más lejos

¿Qué cambiarías para que el script funcione también en una shell POSIX sin arrays?

CIERRE DE LA SECCIÓN

Comprueba que puedes usarlo

Antes de continuar, revisa estos tropiezos frecuentes y resuelve un caso sin copiar los ejemplos.

ERROR 01

Confiar en set -e como manejo completo de errores.

ERROR 02

Crear temporales predecibles o limpiar una ruta formada con variables no validadas.

DESAFÍO INTEGRADOR

Ahora hazlo sin guía

Endurece un script de descarga: opciones, temporal, validación, movimiento atómico, señales y pruebas con entradas adversas.

Mostrar pauta de corrección +
Una respuesta sólida:
  • La limpieza es idempotente.
  • ShellCheck y bash -n quedan sin problemas no justificados.
  • Una descarga fallida nunca reemplaza el archivo válido.