Script Bash sûr et robuste : erreurs, verrou, logs et mode dry-run
Générez un script Bash prêt pour vos serveurs : mode strict, nettoyage avec trap, arguments via getopts, verrou contre les exécutions simultanées, logs, dry-run et code propre pour ShellCheck. Conçu pour ChatGPT, Claude, Gemini et Microsoft Copilot. Il comprend 4 variables personnalisables et vous pouvez le copier gratuitement en un clic.
Intermédiaire · Code · En attente de relecture éditoriale
Prompt
Agis comme un administrateur système Linux qui écrit des scripts shell maintenables et sûrs.
J’ai besoin d’un script qui fasse ceci : {{tache}}
- Environnement d’exécution : {{environnement}}
- Entrées (arguments, fichiers, variables) : {{entrees}}
- Ce qu’il modifie ou supprime : {{effets}}
Livrables :
1. Le script complet avec :
- Un shebang adapté à l’environnement et le mode strict (`set -Eeuo pipefail`) ou son équivalent si le shell n’est pas Bash, en expliquant ses pièges.
- Une fonction `usage` et l’analyse des arguments avec `getopts`, dont `-h`, `-v` (verbeux) et `-n` (dry-run).
- La vérification des dépendances avec `command -v` et des messages clairs s’il en manque une.
- Des variables toujours entre guillemets, `local` dans les fonctions et aucun `eval`.
- Des fichiers temporaires avec `mktemp` et un nettoyage par `trap` sur `EXIT`, `INT` et `TERM`.
- Un verrou avec `flock` (ou une alternative portable) pour empêcher deux exécutions simultanées.
- Des logs horodatés sur stderr et, en option, dans un fichier.
- Des codes de sortie documentés.
- En mode dry-run, l’affichage de ce qui serait fait sans rien exécuter de destructeur.
2. L’explication de chaque bloc et de toute ligne dangereuse (suppressions, permissions, `sudo`).
3. La vérification : ShellCheck sans avertissement et quelques tests bats-core ou une procédure manuelle dans un répertoire de test.
4. La planification avec cron ou un timer systemd si c’est pertinent, avec le PATH et les variables nécessaires.
Contraintes :
- Tout `rm` ou écrasement doit d’abord vérifier que le chemin n’est ni vide ni `/`.
- N’invente ni chemins ni noms de serveurs : utilise les miens ou [À COMPLÉTER].
- Si la tâche est ambiguë ou dangereuse, pose-moi la question avant d’écrire le script.
- Recommande de le tester d’abord avec `-n` et hors production.Comment l'utiliser
- Décrivez la tâche étape par étape, comme vous la feriez à la main.
- Précisez le système exact (distribution, macOS ou conteneur), car le shell disponible change.
- Passez ShellCheck, exécutez avec
-net relisez la sortie avant de retirer le dry-run.
Exemple d'utilisation
Tâche : compresser les logs de plus de 7 jours dans /var/log/monappli et supprimer ceux de plus de 30 jours · Environnement : Debian 12 avec Bash 5 · Effets : supprime d’anciens fichiers.
Exemple de résultat
1. Script
#!/usr/bin/env bash
# rotation-logs.sh — compresse les .log de plus de N jours, supprime les .gz de plus de M jours
set -Eeuo pipefail
LOG_DIR="/var/log/monappli"; JOURS_COMPRESSION=7; JOURS_SUPPRESSION=30
DRY_RUN=0; VERBOSE=0; LOCK="/run/lock/rotation-logs.lock"
log() { printf '%s [%s] %s\n' "$(date '+%F %T')" "$1" "$2" >&2; }
usage() { echo "Usage : ${0##*/} [-h] [-v] [-n] [-d dossier] [-c jours] [-r jours]"; }
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) JOURS_COMPRESSION="$OPTARG" ;; r) JOURS_SUPPRESSION="$OPTARG" ;;
*) usage; exit 1 ;;
esac
done
# Jamais sur un chemin vide ni sur /
[[ -n "$LOG_DIR" && "$LOG_DIR" != "/" && -d "$LOG_DIR" ]] || { log ERROR "répertoire invalide : $LOG_DIR"; exit 2; }
[[ "$JOURS_COMPRESSION$JOURS_SUPPRESSION" =~ ^[0-9]+$ ]] || { log ERROR "les jours doivent être des entiers"; exit 1; }
command -v gzip >/dev/null || { log ERROR "gzip introuvable"; exit 3; }
exec 9>"$LOCK"; flock -n 9 || { log WARN "une autre exécution est en cours"; exit 4; }
find "$LOG_DIR" -type f -name '*.log' -mtime +"$JOURS_COMPRESSION" -print0 |
while IFS= read -r -d '' f; do run gzip -- "$f"; done
find "$LOG_DIR" -type f -name '*.gz' -mtime +"$JOURS_SUPPRESSION" -print0 |
while IFS= read -r -d '' f; do run rm -f -- "$f"; done
-print0 avec read -d '' gère les noms contenant des espaces, et -- empêche un fichier commençant par un tiret d’être pris pour une option. Lancez d’abord ./rotation-logs.sh -n -v et passez-le dans ShellCheck…
Informations clés
- Catégorie
- Programmation et développement · Automatisations
- Type de résultat
- Code
- Niveau
- Intermédiaire
- Conçu pour
- ChatGPT, Claude, Gemini et Microsoft Copilot
- Vérifié sur
- En attente de vérification éditoriale
- Variables
- Tâche, Environnement, Entrées et Ce qu’il modifie ou supprime
- Langue
- Français
- Prix
- Gratuit, sans inscription
- Mis à jour
- 07/11/2026
Questions fréquentes
Que fait exactement set -Eeuo pipefail ?
Le script s’arrête en cas d’erreur (-e), de variable non définie (-u) ou d’échec d’une commande dans un pipe (pipefail) ; -E propage le trap ERR aux fonctions. Il existe des exceptions, d’où la demande de les expliquer.
À quoi sert flock dans un script planifié ?
Il évite que deux exécutions se chevauchent si la précédente n’est pas terminée, ce qui arrive souvent avec cron. Sans verrou, deux copies peuvent écraser les fichiers l’une de l’autre ou dupliquer le travail.
À quoi sert ce prompt ?
Générez un script Bash prêt pour vos serveurs : mode strict, nettoyage avec trap, arguments via getopts, verrou contre les exécutions simultanées, logs, dry-run et code propre pour ShellCheck.
Avec quels outils d'IA fonctionne-t-il ?
Il est conçu pour ChatGPT, Claude, Gemini et Microsoft Copilot. Nous ne l'avons pas encore vérifié sur ces outils ; les résultats peuvent donc varier de l'un à l'autre.
Comment personnaliser le prompt ?
Cliquez sur « Personnaliser » et remplissez les variables (Tâche, Environnement, Entrées et Ce qu’il modifie ou supprime). Le texte se met à jour instantanément et vous pouvez ensuite le copier en un clic. Les valeurs sont stockées uniquement dans votre navigateur.
Faut-il de l'expérience pour l'utiliser ?
Il est de niveau intermédiaire : il vaut mieux connaître le sujet pour fournir un bon contexte et relire le résultat d'un œil critique.
Ce prompt est-il gratuit ?
Oui. Tous les prompts de HomeCasa Prompts sont gratuits, sans inscription ni abonnement. Vous pouvez aussi les utiliser dans des projets professionnels.
Puis-je me fier au résultat de l'IA ?
Considérez-le comme un brouillon de qualité : vérifiez toujours les données, les chiffres et les affirmations importantes avant de publier ou de prendre des décisions.