Ce que vous allez faire
À la fin de ce tutoriel, vous disposerez d’un script Bash structuré avec set -euo pipefail, gestion des arguments via getopts, journalisation via trap et codes de sortie normalisés. Le script sera testable avec shellcheck et réutilisable en production.
Prérequis
- Bash 4.0 ou supérieur installé
- Accès à un terminal avec droits d’exécution sur les scripts
- Shellcheck disponible via le gestionnaire de paquets
- Un éditeur de texte (vi, nano ou VS Code)
Étape 1 — Activer le mode strict
Le mode strict arrête le script dès la première erreur, traite les variables non définies comme des erreurs et propage les échecs dans les pipelines. Cela évite les exécutions partielles silencieuses.
#!/bin/bash
set -euo pipefail
script_dir=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
cd "$script_dir"Étape 2 — Gérer les arguments avec getopts
getopts permet de traiter les options courtes de façon standard et de fournir un message d’usage clair en cas d’erreur.
while getopts ":f:v:h" opt; do
case $opt in
f) fichier="$OPTARG" ;;
v) verbose=1 ;;
h) echo "Usage: $0 [-f fichier] [-v]" ; exit 0 ;;
\?) echo "Option invalide: -$OPTARG" >&2 ; exit 1 ;;
esac
done
shift $((OPTIND -1))Étape 3 — Ajouter la journalisation et les traps
Un trap sur EXIT, ERR et INT garantit que les ressources sont libérées et que les erreurs sont journalisées même en cas d’interruption.
log_file="/var/log/$(basename "$0").log"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$log_file"
}
trap 'log "Script terminé avec le code $?"' EXIT
trap 'log "Erreur à la ligne $LINENO"' ERR
trap 'log "Interruption reçue" ; exit 130' INTÉtape 4 — Normaliser les codes de sortie
Définir des codes de sortie explicites facilite l’intégration du script dans des pipelines ou des orchestrateurs.
if [[ ! -f "$fichier" ]]; then
log "Fichier introuvable: $fichier"
exit 2
fi
# ... traitement ...
exit 0Étape 5 — Éviter les pièges de quoting
Toujours protéger les variables avec des guillemets doubles empêche les coupures sur les espaces et les injections involontaires.
for item in "${liste[@]}"; do
rsync -av "$item" /destination/
doneÉtape 6 — Tester avec shellcheck
Shellcheck détecte les erreurs courantes avant exécution. Exécutez-le systématiquement après chaque modification.
shellcheck /chemin/vers/votre_script.shVérifier que tout fonctionne
Exécutez le script avec l’option -x pour tracer l’exécution et vérifiez les codes de sortie.
bash -x ./votre_script.sh -f /etc/hosts -v
echo $?Erreurs fréquentes
Le script continue après une commande qui a échoué
Cause : set -e absent. Correction : ajouter set -euo pipefail en début de script.
Les variables vides provoquent des erreurs inattendues
Cause : absence de set -u. Correction : activer set -u et initialiser les variables.
Les chemins contenant des espaces sont tronqués
Cause : absence de guillemets autour des variables. Correction : toujours utiliser "$variable".
Aller plus loin
Intégrez ensuite votre script dans systemd pour une exécution planifiée ou combinez-le avec des outils comme Ansible pour le déploiement sur plusieurs machines.
Se former avec Learni
Formation Bash : Scripts et Commandes pour l’Automatisation sous Linux
Destinée aux développeurs, administrateurs systèmes et techniciens IT. Niveau intermédiaire, présentiel, 3 journées. Objectifs : comprendre le shell Bash, écrire et déboguer des scripts, manipuler variables et structures de contrôle. Détails de la formation
Formation Bash : Scripts et Automatisation Linux
Destinée aux administrateurs systèmes, développeurs et techniciens. Niveau intermédiaire, présentiel, 3 journées. Objectifs : maîtriser les commandes Bash, automatiser les tâches répétitives et administrer le système. Détails de la formation
Formation Bash - Scripts avancés et automatisation système
Destinée aux administrateurs systèmes, ingénieurs DevOps et experts IT. Niveau expert, présentiel, 3 journées. Objectifs : techniques avancées, scripts complexes Linux/Windows Server, stratégies robustes. Détails de la formation
Le tarif est communiqué sur devis sous 24 h. Obtenir un devis sous 24 h
FAQ
Quelle version de Bash est requise pour set -euo pipefail ?
Bash 4.0 ou supérieur. Les versions antérieures n’implémentent pas entièrement le comportement de pipefail.
Comment vérifier la présence de shellcheck sur Debian ?
Exécutez apt list --installed | grep shellcheck. Si absent, installez avec apt install shellcheck.
Le script s’arrête-t-il sur une commande dans un pipeline ?
Oui, grâce à set -o pipefail. Chaque commande du pipeline est prise en compte pour le code de sortie final.
Où placer le fichier de log quand /var/log n’est pas accessible ?
Utilisez $HOME/.local/log/ ou un répertoire défini par une variable d’environnement modifiable par l’utilisateur.



