Avis Google vérifiés Tutoriels techniques

Comment écrire un script Bash robuste

Apprenez à structurer un script Bash avec set -euo pipefail, getopts, trap et shellcheck pour un résultat fiable dès aujourd’hui.

Suggestions populaires
Ctrl K ouvrir · esc fermer
Voir toutes les formations →
Qualiopi · depuis 2024
511+ villes · 25 pays
OPCO et FNE
Par ··8 min de lecture
← Retour au blogComment écrire un script Bash robuste

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.

bash
#!/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.

bash
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.

bash
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.

bash
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.

bash
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.

bash
shellcheck /chemin/vers/votre_script.sh

Vé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
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.

Aller plus loin

Se former sur ce sujet avec Learni

Ce tutoriel couvre l'essentiel. Ces trois formations intra-entreprise vont plus loin : cas réels, environnement de votre SI, formateur praticien.

Formation Bash : Scripts et Commandes pour l’Automatisation sous Linux

3 journées · présentiel · Intermédiaire

Sur devis

Voir la formation

Formation Bash : Scripts et Automatisation Linux

3 journées · présentiel · Intermédiaire

Sur devis

Voir la formation

Formation Bash - Scripts avancés et automatisation système

3 journées · présentiel · Expert

Sur devis

Voir la formation

Une équipe à former sur ce sujet ? Devis sous 24 h

Votre formation professionnelle partout

Construisons
votre prochain
parcours.

30 minutes avec un conseiller formation. Sans engagement. Sans argumentaire commercial maquillé en démo.

Réponse sous 24 h · Qualiopi · OPCO
WhatsApp