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 $-
Il existe un débogueur dont la syntaxe est proche de gdb: bashdb. Il s'appuie sur une option de Bash (extdebug).