Recherche de site Web

Comment effectuer le mode de débogage de vérification de syntaxe dans les scripts Shell


Nous avons commencé la série de débogage des scripts shell en expliquant les différentes options de débogage et comment activer les modes de débogage des scripts shell.

Après avoir écrit vos scripts shell, il est recommandé de vérifier pratiquement la syntaxe des scripts avant de les exécuter, plutôt que de regarder leur sortie pour confirmer qu'ils fonctionnent correctement.

Dans cette partie de la série, nous verrons comment utiliser le mode de débogage de vérification de la syntaxe. N'oubliez pas que nous avons expliqué les différentes options de débogage dans la première partie de cette série et que nous les utiliserons ici pour effectuer le débogage de scripts.

Activation du mode de débogage détaillé

Avant de passer à l'objectif principal de ce guide, explorons brièvement le mode verbeux. Il est activé par l'option de débogage -v, qui indique au shell d'afficher toutes les lignes d'un script pendant leur lecture.

Pour démontrer comment cela fonctionne, vous trouverez ci-dessous un exemple de script shell permettant de convertir par lots des images PNG au format JPG.

Tapez-le (ou copiez-collez) dans un fichier.

#!/bin/bash
#convert
for image in *.png; do
        convert  "$image"  "${image%.png}.jpg"
        echo "image $image converted to ${image%.png}.jpg"
done
exit 0

Enregistrez ensuite le fichier et rendez le script exécutable à l'aide de la commande ci-dessous :

chmod +x script.sh

Nous pouvons invoquer le script et afficher toutes les lignes qu'il contient au fur et à mesure qu'elles sont lues par le shell comme ceci :

bash -v script.sh

Activation du mode de débogage de vérification de syntaxe dans les scripts Shell

Pour en revenir à notre sujet principal, le -n active le mode de vérification de la syntaxe. Il demande au shell de lire essentiellement toutes les commandes, mais ne les exécute pas, il (le shell) examine uniquement la syntaxe utilisée.

S'il y a des erreurs dans votre script shell, le shell affichera les erreurs sur le terminal, sinon il n'affichera rien.

La syntaxe d'activation de la vérification syntaxique est la suivante :

bash -n script.sh

La syntaxe du script étant correcte, la commande ci-dessus n'affichera aucune sortie. Par conséquent, essayons de supprimer le mot done qui ferme la boucle for et voyons s'il affiche une erreur :

Vous trouverez ci-dessous le script shell modifié pour convertir par lots les images png au format jpg qui contient un bogue.

#!/bin/bash
#script with a bug
#convert
for image in *.png; do
        convert  "$image"  "${image%.png}.jpg"
        echo "image $image converted to ${image%.png}.jpg"

exit 0

Enregistrez le fichier, puis exécutez-le tout en effectuant une vérification de la syntaxe :

bash -n script.sh

À partir du résultat ci-dessus, nous pouvons voir qu'il y a un problème de syntaxe avec notre script, il manque un mot-clé de fermeture done dans la boucle for. Et le shell l'a cherché jusqu'à la fin du fichier et une fois qu'il ne l'a pas trouvé (fait), le shell a affiché une erreur de syntaxe :

script.sh: line 11: syntax error: unexpected end of file

Nous pouvons également combiner le mode verbeux et le mode de vérification de la syntaxe :

bash -vn script.sh

Alternativement, nous pouvons activer la vérification de la syntaxe en modifiant la première ligne du script ci-dessus comme dans l'exemple suivant.

#!/bin/bash -n
#altering the first line of a script to enable syntax checking

#convert
for image in *.png; do
    convert  "$image"  "${image%.png}.jpg"
    echo "image $image converted to ${image%.png}.jpg"

exit 0

Comme auparavant, enregistrez le fichier et exécutez-le tout en effectuant une vérification de la syntaxe :

./script.sh

script.sh: line 12: syntax error: unexpected end of file

De plus, nous pouvons utiliser la commande intégrée set shell pour activer le mode débogage dans le script ci-dessus.

Dans l'exemple ci-dessous, nous vérifions uniquement la syntaxe de la boucle for dans notre script.

#!/bin/bash
#using set shell built-in command to enable debugging
#convert

#enable debugging
set -n
for image in *.png; do
    convert  "$image"  "${image%.png}.jpg"
    echo "image $image converted to ${image%.png}.jpg"

#disable debugging
set +n
exit 0

Encore une fois, enregistrez le fichier et invoquez le script :

./script.sh 

En résumé, nous devons toujours nous assurer de vérifier syntaxiquement nos scripts shell pour capturer toute erreur avant de les exécuter.

Pour nous faire part de vos questions ou commentaires concernant ce guide, utilisez le formulaire de réponse ci-dessous. Dans la troisième partie de cette série, nous passerons à l’explication et à l’utilisation du mode de débogage du shell tracing.