Hébergement gratuit en ligne pour les postes de travail

<Précédent | Table des matières | Suivant>

Traçant

Les bogues sont souvent des cas de flux logique inattendu dans un script. C'est-à-dire que des parties du script ne sont jamais exécutées ou sont exécutées dans le mauvais ordre ou au mauvais moment. Pour visualiser le déroulement réel du programme, nous utilisons une technique appelée traçant.

Une méthode de traçage consiste à placer des messages informatifs dans un script qui affiche le lieu d'exécution. Nous pouvons ajouter des messages à notre fragment de code :



echo "préparation à la suppression de fichiers" >&2

if [[ -d $dir_name ]] ; alors si cd $dir_name; alors

echo "suppression de fichiers" >&2

rm *

d'autre

echo "Impossible d'accéder à '$dir_name'" >&2 exit 1

fi d'autre

echo "aucun répertoire de ce type : '$dir_name'" >&2 exit 1

fi

echo "suppression de fichier terminée" >&2

echo "préparation à la suppression de fichiers" >&2

if [[ -d $dir_name ]] ; alors si cd $dir_name; alors

echo "suppression de fichiers" >&2

rm *

d'autre

echo "Impossible d'accéder à '$dir_name'" >&2 exit 1

fi d'autre

echo "aucun répertoire de ce type : '$dir_name'" >&2 exit 1

fi

echo "suppression de fichier terminée" >&2


Nous envoyons les messages à l'erreur standard pour les séparer de la sortie normale. Nous n'indentons pas non plus les lignes contenant les messages, il est donc plus facile de trouver quand il est temps de les supprimer.

Maintenant, lorsque le script est exécuté, il est possible de voir que la suppression du fichier a été effectuée :



[me@linuxbox ~]$ delete-script se prépare à supprimer des fichiers en supprimant des fichiers

suppression du fichier terminée [me@linuxbox ~]$

[me@linuxbox ~]$ delete-script se prépare à supprimer des fichiers en supprimant des fichiers

suppression du fichier terminée [me@linuxbox ~]$


bash fournit également une méthode de traçage, implémentée par l'option -x et la commande set avec l'option -x. En utilisant notre script de problème précédent, nous pouvons activer le traçage pour l'ensemble du script en ajoutant l'option -x à la première ligne :


#!/bin/bash-x

#!/bin/bash-x

Débogage


# problème : script pour démontrer les erreurs courantes number=1

if [ $nombre = 1 ] ; alors

echo "Le nombre est égal à 1." autre

echo "Le nombre n'est pas égal à 1."

fi

# problème : script pour démontrer les erreurs courantes number=1

if [ $nombre = 1 ] ; alors

echo "Le nombre est égal à 1." autre

echo "Le nombre n'est pas égal à 1."

fi


Une fois exécuté, les résultats ressemblent à ceci :



[moi@linuxbox ~]$ difficulté

+ nombre=1

+ '[' 1 = 1 ']'

+ echo 'Le nombre est égal à 1.' Le nombre est égal à 1.

[moi@linuxbox ~]$ difficulté

+ nombre=1

+ '[' 1 = 1 ']'

+ echo 'Le nombre est égal à 1.' Le nombre est égal à 1.


Avec le traçage activé, nous voyons les commandes exécutées avec les extensions appliquées. Les signes plus de tête indiquent l'affichage de la trace pour les distinguer des lignes de sortie régulières. Le signe plus est le caractère par défaut pour la sortie de trace. Il est contenu dans le PS4 (chaîne d'invite 4) variable shell. Le contenu de cette variable peut être ajusté pour rendre l'invite plus utile. Ici, nous modifions le contenu de la variable pour inclure le numéro de ligne actuel dans le script où la trace est effectuée. Notez que les guillemets simples sont nécessaires pour empêcher l'expansion jusqu'à ce que l'invite soit réellement utilisée :



[moi@linuxbox ~]$ export PS4='$LINENO + '

[moi@linuxbox ~]$ difficulté

5 + nombre=1

7 + '[' 1 = 1 ']'

8 + echo 'Le nombre est égal à 1.' Le nombre est égal à 1.

[moi@linuxbox ~]$ export PS4='$LINENO + '

[moi@linuxbox ~]$ difficulté

5 + nombre=1

7 + '[' 1 = 1 ']'

8 + echo 'Le nombre est égal à 1.' Le nombre est égal à 1.


Pour effectuer une trace sur une partie sélectionnée d'un script, plutôt que sur le script entier, nous pouvons utiliser le set commande avec le -x option:


#! / Bin / bash

# problème : script pour démontrer les erreurs courantes number=1

#! / Bin / bash

# problème : script pour démontrer les erreurs courantes number=1



set -x # Activer le traçage

if [ $nombre = 1 ] ; alors

echo "Le nombre est égal à 1." autre

echo "Le nombre n'est pas égal à 1."

fi

set +x # Désactiver le traçage


set -x # Activer le traçage

if [ $nombre = 1 ] ; alors

echo "Le nombre est égal à 1." autre

echo "Le nombre n'est pas égal à 1."

fi

set +x # Désactiver le traçage


Nous utilisons les set commande avec le -x option pour activer le traçage et le +x option pour désactiver le traçage. Cette technique peut être utilisée pour examiner plusieurs parties d'un script problématique.


Meilleur système d'exploitation Cloud Computing chez OnWorks :