Script de Bash seguro y robusto: errores, bloqueo, logs y dry-run
Genera un script de Bash listo para servidores: modo estricto, limpieza con trap, argumentos con getopts, bloqueo contra ejecuciones simultáneas, logs, dry-run y código limpio para ShellCheck. Pensado para ChatGPT, Claude, Gemini y Microsoft Copilot. Incluye 4 variables personalizables y se copia gratis en un clic.
Intermedio · Código · Pendiente de revisión editorial
Prompt
Actúa como administrador de sistemas Linux que escribe scripts de shell mantenibles y seguros.
Necesito un script que haga lo siguiente: {{tarea}}
- Entorno donde se ejecutará: {{entorno}}
- Entradas (argumentos, archivos, variables): {{entradas}}
- Qué modifica o borra: {{efectos}}
Entregables:
1. El script completo con:
- Shebang adecuado al entorno y modo estricto (`set -Eeuo pipefail`) o su equivalente si el shell no es Bash, explicando sus trampas.
- Función `usage` y análisis de argumentos con `getopts`, incluidos `-h`, `-v` (detallado) y `-n` (dry-run).
- Comprobación de dependencias con `command -v` y mensajes claros si falta alguna.
- Variables siempre entrecomilladas, `local` en funciones y nada de `eval`.
- Archivos temporales con `mktemp` y limpieza con `trap` en `EXIT`, `INT` y `TERM`.
- Bloqueo con `flock` (o alternativa portable) para impedir dos ejecuciones simultáneas.
- Logs con marca de tiempo a stderr y, opcionalmente, a un archivo.
- Códigos de salida documentados.
- En modo dry-run, mostrar lo que haría sin ejecutar nada destructivo.
2. Explicación de cada bloque y de cualquier línea peligrosa (borrados, permisos, `sudo`).
3. Cómo verificarlo: ShellCheck sin avisos y algunos tests con bats-core o un procedimiento manual en un directorio de pruebas.
4. Cómo programarlo con cron o un timer de systemd si tiene sentido, con el PATH y las variables necesarias.
Restricciones:
- Cualquier `rm` o sobrescritura debe validar antes que la ruta no está vacía ni es `/`.
- No inventes rutas ni nombres de servidores: usa los míos o [COMPLETAR].
- Si la tarea es ambigua o peligrosa, pregúntame antes de escribir el script.
- Recomienda probarlo primero con `-n` y en un entorno que no sea producción.Cómo usarlo
- Describe la tarea paso a paso como la harías a mano.
- Indica el sistema exacto (distribución, macOS o contenedor) porque cambia el shell disponible.
- Pasa ShellCheck, ejecuta con
-ny revisa la salida antes de quitar el dry-run.
Ejemplo de uso
Tarea: comprimir los logs de más de 7 días de /var/log/miapp y borrar los de más de 30 · Entorno: Ubuntu 24.04 con Bash 5 · Efectos: borra archivos antiguos.
Resultado de ejemplo
1. Script
#!/usr/bin/env bash
# rotar-logs.sh — comprime .log de más de N días y borra .gz de más de M días
set -Eeuo pipefail
LOG_DIR="/var/log/miapp"; COMPRIMIR_DIAS=7; BORRAR_DIAS=30
DRY_RUN=0; VERBOSE=0; LOCK="/run/lock/rotar-logs.lock"
log() { printf '%s [%s] %s\n' "$(date '+%F %T')" "$1" "$2" >&2; }
usage() { echo "Uso: ${0##*/} [-h] [-v] [-n] [-d dir] [-c días] [-r días]"; }
run() { if (( DRY_RUN )); then log DRY "$*"; return 0; fi
if (( VERBOSE )); then log INFO "$*"; fi; "$@"; }
while getopts ":hvnd:c:r:" opt; do
case "$opt" in
h) usage; exit 0 ;; v) VERBOSE=1 ;; n) DRY_RUN=1 ;;
d) LOG_DIR="$OPTARG" ;; c) COMPRIMIR_DIAS="$OPTARG" ;; r) BORRAR_DIAS="$OPTARG" ;;
*) usage; exit 1 ;;
esac
done
# Nunca operar sobre una ruta vacía ni sobre /
[[ -n "$LOG_DIR" && "$LOG_DIR" != "/" && -d "$LOG_DIR" ]] || { log ERROR "directorio no válido: $LOG_DIR"; exit 2; }
[[ "$COMPRIMIR_DIAS$BORRAR_DIAS" =~ ^[0-9]+$ ]] || { log ERROR "los días deben ser enteros"; exit 1; }
command -v gzip >/dev/null || { log ERROR "falta gzip"; exit 3; }
exec 9>"$LOCK"; flock -n 9 || { log WARN "ya hay otra ejecución en curso"; exit 4; }
find "$LOG_DIR" -type f -name '*.log' -mtime +"$COMPRIMIR_DIAS" -print0 |
while IFS= read -r -d '' f; do run gzip -- "$f"; done
find "$LOG_DIR" -type f -name '*.gz' -mtime +"$BORRAR_DIAS" -print0 |
while IFS= read -r -d '' f; do run rm -f -- "$f"; done
-print0 con read -d '' soporta nombres con espacios, y -- impide que un archivo que empiece por guion se interprete como opción. Ejecuta primero ./rotar-logs.sh -n -v y pásalo por ShellCheck…
Datos clave
- Categoría
- Programación y desarrollo · Automatizaciones
- Tipo de resultado
- Código
- Nivel
- Intermedio
- Pensado para
- ChatGPT, Claude, Gemini y Microsoft Copilot
- Verificado en
- Pendiente de verificación editorial
- Variables
- Tarea, Entorno, Entradas y Qué modifica o borra
- Idioma
- Español
- Precio
- Gratis, sin registro
- Actualizado
- 07/11/2026
Preguntas frecuentes
¿Qué hace exactamente set -Eeuo pipefail?
Hace que el script se detenga ante un error (-e), ante variables no definidas (-u) y ante fallos en cualquier comando de una tubería (pipefail); -E propaga el trap de ERR a las funciones. Tiene excepciones, por eso el prompt pide explicarlas.
¿Para qué sirve flock en un script programado?
Evita que se solapen dos ejecuciones si la anterior aún no ha terminado, algo habitual con cron. Sin bloqueo, dos copias pueden pisarse los archivos o duplicar el trabajo.
¿Para qué sirve este prompt?
Genera un script de Bash listo para servidores: modo estricto, limpieza con trap, argumentos con getopts, bloqueo contra ejecuciones simultáneas, logs, dry-run y código limpio para ShellCheck.
¿Con qué herramientas de IA funciona?
Está pensado para ChatGPT, Claude, Gemini y Microsoft Copilot. Todavía no lo hemos verificado en estas herramientas, por lo que los resultados pueden variar entre ellas.
¿Cómo personalizo el prompt?
Pulsa «Personalizar» y rellena las variables (Tarea, Entorno, Entradas y Qué modifica o borra). El texto se actualiza al instante y después puedes copiarlo con un clic. Los valores se guardan solo en tu navegador.
¿Necesito experiencia para usarlo?
Es de nivel intermedio: conviene que conozcas el tema para aportar buen contexto y revisar el resultado con criterio.
¿Este prompt es gratis?
Sí. Todos los prompts de HomeCasa Prompts son gratuitos, sin registro ni suscripción. Puedes usarlos también en proyectos profesionales.
¿Puedo fiarme del resultado de la IA?
Úsalo como un borrador de calidad: revisa siempre datos, cifras y afirmaciones importantes antes de publicarlos o tomar decisiones.