{{tag>dev shell bash debug}} ====== Débogage de scripts shell ====== Avant toute exécution, on peut vouloir valider la syntaxe d'un fichier de script. Pour cela on peut invoquer un shell avec l'option -n (noexec) et le scrit à vérifier en paramètre: bash -n monscript.sh Le shell Bash peut être invoqué avec l'option **-x** pour activer le mode trace/debug. Les commandes sont affichées sur la sortie standard avant exécution préfixées par le caractère '+'. Dans l'exemple ci-dessous le script utilise en première ligne le shabang pour spécifier l'interpréteur à utiliser (bash) avec l'option **-x** (**xtrace**) ainsi les commandes présentes dans le script seront affichées avant exécution. #!/bin/bash -x # Les commandes présentes dans ce script sont affichées # Le shell est invoqué avec l'option xtrace A tout moment dans un script on peut activer/désactiver l'option via la commande interne **set**: # Activer l'affichage des commandes avant exécution set -x # équivalent set -o xtrace # désactiver l'affichage des commandes avant exécution set +x # équivalent set +o xtrace Ci-dessous quelques options couramment utilisées pour le développement et le débogage: ^ Notation courte ^ Notation longue ^ Résultat | | set -e | set -o errexit | Interruption immédiate lorsqu'un code de retour est différent de 0. | | set -f | set -o noglob | Désactive la génération des noms via les méta-caractères (globbing).| | set -v | set -o verbose | Affiche les lignes lues avant interprétation. | | set -x | set -o xtrace | Affiche la commande avant execution. | | set -u | set -o nounset | Utilisation d'une variable non définie provoque une erreur. | | set -n | set -o noexec | Valider la syntaxe d'un fichier script sans executer les commandes. | Pour afficher les options activées par les arguments positionnels: echo $- ===== bashdb ===== Il existe un débogueur dont la syntaxe est proche de gdb: **bashdb**. Il s'appuie sur une option de Bash (extdebug). Sur les versions récentes d'Ubuntu le programme n'est plus intégré au gestionnaire de paquets. Il faudra l'installer à partir des sources, voir https://sourceforge.net/p/bashdb/code/ci/bash-5.1/tree/INSTALL ===== Références ===== https://tldp.org/LDP/Bash-Beginners-Guide/html/sect_02_03.html