Objectifs
- Tracer l’exécution d’un script en temps réel avec
set -x. - Personnaliser la sortie de débogage pour y ajouter des informations de contexte (nom du fichier, numéro de ligne).
- Analyser statiquement votre code pour trouver des erreurs courantes et des mauvaises pratiques avec
shellcheck. - Formatter automatiquement votre code pour le rendre plus lisible avec
shfmt.
Explications détaillées
Notions clés
Déboguer un script shell peut être frustrant. Heureusement, des outils puissants existent pour vous faciliter la vie.
set -x : Voir ce que le shell exécute
set -x (ou set -o xtrace) est un mode de débogage intégré à Bash. Lorsqu’il est activé, le shell affiche chaque commande juste avant de l’exécuter, après avoir effectué toutes les expansions (remplacement des variables, etc.). C’est le meilleur moyen de voir exactement ce que votre script fait.
On le désactive avec set +x. On peut aussi lancer un script entier en mode debug avec bash -x mon_script.sh.
PS4 : Personnaliser la sortie de set -x
Par défaut, set -x préfixe chaque ligne de + . Vous pouvez personnaliser ce préfixe en modifiant la variable PS4 pour y ajouter des informations utiles.
Une configuration PS4 très pratique est :
export PS4='+ ${BASH_SOURCE}:${LINENO}: ${FUNCNAME[0]:+${FUNCNAME[0]}()}: '
+: Le préfixe de base.${BASH_SOURCE}: Le nom du fichier en cours d’exécution.${LINENO}: Le numéro de la ligne.${FUNCNAME[0]}: Le nom de la fonction en cours.
shellcheck : Le correcteur orthographique de votre script
shellcheck est un outil d’analyse statique (un “linter”) qui détecte des centaines d’erreurs courantes, de bugs potentiels et de mauvaises pratiques dans vos scripts, sans même avoir à les exécuter.
C’est l’outil le plus important à adopter pour améliorer la qualité de vos scripts. Installez-le et utilisez-le systématiquement.
shfmt : Le formateur de code automatique
shfmt est un outil qui reformate automatiquement votre code pour qu’il suive un style cohérent et lisible (indentation, espacement, etc.). Il vous évite d’avoir à vous soucier de la mise en forme.
Syntaxe / Usages
# Lancer un script entier en mode debug
bash -x ./mon_script.sh
# Activer et désactiver le debug dans une section d'un script
echo "Début d'une section complexe..."
set -x
# ... code à tracer ...
set +x
echo "Fin de la section complexe."
# Analyser un script avec shellcheck
shellcheck mon_script.sh
# Formatter un script en place
shfmt -w mon_script.sh
Exemples
# 1. Utilisation de set -x
#!/usr/bin/env bash
set -eu
USER="admin"
# On active le mode xtrace
set -x
if [[ "$USER" == "admin" ]]; then
echo "Accès autorisé."
fi
# On le désactive
set +x
echo "Fin."
# Sortie du script :
# + [[ admin == \a\d\m\i\n ]]
# + echo 'Accès autorisé.'
# Accès autorisé.
# + set +x
# Fin.
# On voit exactement la commande de test qui a été exécutée.
# 2. Utilisation de shellcheck
# Script avec une erreur classique :
# #!/bin/bash
# for f in $(ls *.txt); do
# echo "$f"
# done
#
# shellcheck va immédiatement vous avertir :
# SC2045: Iterating over ls output is fragile. Use globs.
# SC2086: Double quote to prevent globbing and word splitting.
Bonnes pratiques
- Intégrez
shellcheckà votre éditeur de code (via une extension) pour avoir des retours en temps réel pendant que vous écrivez. - Ajoutez
shellchecketshfmtà votre CI/CD. Cela garantit que tout le code qui arrive sur la branche principale respecte un standard de qualité et de formatage. - Utilisez
set -xlocalement pour débugger des sections spécifiques, mais ne le laissez pas en production, car il peut être très verbeux et potentiellement afficher des informations sensibles.
Pièges courants
- Affichage de secrets avec
set -x: Si une commande utilise une variable contenant un mot de passe,set -xl’affichera en clair dans les logs. Soyez extrêmement prudent. - Ignorer les avertissements de
shellcheck:shellcheckest le fruit de l’analyse de milliers de scripts. Ses suggestions sont presque toujours pertinentes. Les ignorer, c’est prendre le risque d’introduire des bugs subtils.
Exercices
-
Tracer un script :
- Prenez un des scripts que vous avez écrits dans les leçons précédentes.
- Lancez-le avec
bash -xet observez la sortie. Essayez de comprendre chaque ligne affichée. - Ajoutez
set -xetset +xpour ne tracer qu’une petite partie du script.
-
Corriger avec
shellcheck:- Installez
shellchecksur votre machine (via votre gestionnaire de paquets, ex:sudo apt install shellcheck). - Écrivez volontairement un script avec des erreurs courantes (une variable non citée, une boucle sur
ls). - Lancez
shellcheckdessus et corrigez les problèmes qu’il signale.
- Installez
-
Formatter avec
shfmt:- Installez
shfmt. - Écrivez un script avec une indentation et un espacement incohérents.
- Utilisez
shfmt -w mon_script.shpour le reformater automatiquement.
- Installez