Scripts Bash fiables
Progression
#Écrire des scripts Bash fiables
Un “bon” script Bash est prévisible, explicite et échoue tôt en cas de problème. Commencez par un shebang et des options qui durcissent le comportement:
1#!/usr/bin/env bash2set -Eeuo pipefail3IFS=$'\n\t'L'option -e est cruciale car elle arrête immédiatement le script si une commande échoue, évitant ainsi des réactions en chaîne catastrophiques. L'option -u permet de détecter les variables non définies, souvent sources de bugs silencieux. Enfin, -o pipefail s'assure que si une commande échoue au milieu d'un pipe, l'erreur est bien propagée et non masquée par le succès de la dernière commande.
Le piège classique: l’expansion hasardeuse des variables. En règle générale, entourez vos variables de guillemets: "$var". Cela évite les surprises dues aux espaces et au “globbing”.
La lisibilité se gagne aussi avec des fonctions courtes et des noms explicites. Préférez des case aux enchaînements de if fragiles, et regroupez les sorties dans une fonction die() qui affiche un message sur stderr puis quitte avec un code non nul. Pour le débogage ponctuel, set -x affiche les commandes exécutées; pensez à le couper une fois le problème résolu.
Gabarit de script commenté:
1#!/usr/bin/env bash2set -Eeuo pipefail3IFS=$'\n\t'4 5usage() { echo "Usage: $0 -f <fichier>"; }6 7file=""8while getopts ":f:h" opt; do9 case "$opt" in10 f) file="$OPTARG" ;;11 h) usage; exit 0 ;;12 *) usage; exit 2 ;;13 esac14doneOrganisez vos scripts: un dossier bin/ pour les exécutables, un logs/ si vous écrivez des fichiers de traces, et des variables d’environnement chargées depuis un .env (à ne pas committer s’il contient des secrets).
Les fichiers temporaires doivent être uniques et nettoyés. Utilisez mktemp pour éviter les collisions et installez un trap sur EXIT pour supprimer les artefacts. Quand un script manipule des chemins avec des espaces, double‑citez systématiquement et parcourez les fichiers avec find -print0 | xargs -0 pour rester robuste.
#Animation: garde‑fous d’un script
#Mini‑exercice (robustesse)
Écrivez un script qui:
Commencez par créer un dossier temporaire sécurisé avec mktemp -d et assurez-vous qu'il soit automatiquement supprimé à la fin du script grâce à un trap ... EXIT. Ensuite, simulez le téléchargement d'un fichier (avec un simple echo) et vérifiez son intégrité via sha256sum.
Votre script doit également gérer proprement l'interruption par l'utilisateur (Ctrl+C) en affichant un message d'annulation et en nettoyant les ressources. Enfin, testez la robustesse de votre pipe en vérifiant que l'option pipefail remonte bien les erreurs intermédiaires.