Necesitas variables, condiciones, bucles y funciones de la sección anterior.
Avanza en orden. Cada lección está redactada para Palta es Cool, utiliza ejemplos propios y termina con una actividad cuya respuesta puedes desplegar.
Ubícate antes de avanzar
Al terminar deberías poder relacionar Errores y temporales con Opciones y señales y resolver un caso nuevo.
Reserva entre 75 y 120 minutos o divide el laboratorio en dos sesiones.
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.
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.
- Modo estricto ayuda, pero no reemplaza diseño
- getopts y trap definen una interfaz controlada
- ShellCheck, pruebas y fixtures descubren supuestos
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.
Usa ${variable-} cuando la ausencia es válida.
Captura el estado inmediatamente después de la operación relevante.
Un error silencioso no se vuelve correcto por continuar.
¿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.
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.
Una opción inválida devuelve uso y estado 2.
INT y TERM merecen una salida ordenada.
EXIT centraliza limpieza normal y por error.
¿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.
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.
Prueba estados de salida además del texto.
Compara resultados sin depender del orden cuando el contrato no lo promete.
Usa una shell explícita si buscas portabilidad POSIX.
¿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.
Tu recorrido en tres ideas
- Modo estricto ayuda, pero no reemplaza diseño
- getopts y trap definen una interfaz controlada
- ShellCheck, pruebas y fixtures descubren supuestos
Entrega una herramienta de informes resistente
Integra quoting, argumentos, temporales, señales, estados, análisis estático y pruebas adversas en una utilidad reusable.
El script actual rompe rutas con espacios, deja temporales al cancelar y reemplaza el informe anterior cuando una etapa falla.
Procedimiento
- Define contrato, opciones y códigos de salida.
- Construye en temporal, valida y mueve de forma atómica; limpia con trap.
- 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?
Comprueba que puedes usarlo
Antes de continuar, revisa estos tropiezos frecuentes y resuelve un caso sin copiar los ejemplos.
Confiar en set -e como manejo completo de errores.
Crear temporales predecibles o limpiar una ruta formada con variables no validadas.
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 +
- La limpieza es idempotente.
- ShellCheck y bash -n quedan sin problemas no justificados.
- Una descarga fallida nunca reemplaza el archivo válido.
