Différences
Ci-dessous, les différences entre deux révisions de la page.
| tutoriel:programmation:deboguage:bash:start [2022/06/04 19:17] – [Comment déboguer un script bash à l'aide de la commande hook] admin | tutoriel:programmation:deboguage:bash:start [2022/08/13 22:15] (Version actuelle) – modification externe 127.0.0.1 | ||
|---|---|---|---|
| Ligne 349: | Ligne 349: | ||
| echo "The sum is $sum"</ | echo "The sum is $sum"</ | ||
| - | La commande **trap** avec le signal **DEBUG** affiche l' | + | La commande **trap** avec le signal **DEBUG** affiche l' |
| + | Line 3: first number is , second number is , and sum is | ||
| + | Enter first number | ||
| + | Line 4: first number is , second number is , and sum is | ||
| + | 4 | ||
| + | Line 5: first number is 4, second number is , and sum is | ||
| + | Enter second number | ||
| + | Line 6: first number is 4, second number is , and sum is | ||
| + | 2 | ||
| + | Line 7: first number is 4, second number is 2, and sum is | ||
| + | Line 8: first number is 4, second number is 2, and sum is 6 | ||
| + | The sum is 6</ | ||
| + | |||
| + | Lignes 3, 4, 5, 6 et 7, les espaces après le mot " | ||
| + | |||
| + | Cette méthode est également très utile lors du débogage de scripts bash. | ||
| ==== Comment déboguer un script bash sans substitution de fichier à l'aide de l' | ==== Comment déboguer un script bash sans substitution de fichier à l'aide de l' | ||
| + | La substitution de fichiers est le processus de recherche de fichiers avec des caractères génériques, | ||
| + | Dans de nombreux cas, vous n'avez pas besoin de développer les fichiers pendant le débogage. | ||
| + | |||
| + | Dans de tels cas, vous pouvez bloquer la substitution de fichiers avec l' | ||
| + | |||
| + | Voyons le script :<code bash fglobe_script.sh> | ||
| + | #! /bin/bash | ||
| + | |||
| + | echo " | ||
| + | ls *.txt</ | ||
| + | |||
| + | Le code ci-dessus affichera tous les fichiers texte du répertoire courant :<cli prompt=' | ||
| + | Display all text files | ||
| + | Doc1.txt | ||
| + | |||
| + | Pour désactiver la substitution de fichiers, utilisez l' | ||
| + | Display all text files | ||
| + | ls: impossible d' | ||
| + | |||
| + | De même, vous pouvez l' | ||
| + | |||
| + | set -f | ||
| + | echo " | ||
| + | ls *.txt | ||
| + | set +f</ | ||
| + | |||
| + | Exécutez maintenant bash fglobe_script.sh :< | ||
| + | Display all text files | ||
| + | Doc1.txt | ||
| + | Display all text files | ||
| + | ls: impossible d' | ||
| ==== Comment combiner les options de débogage pour déboguer un script shell ==== | ==== Comment combiner les options de débogage pour déboguer un script shell ==== | ||
| + | Nous n' | ||
| + | |||
| + | Implémentons les variantes **-x** et **-v** du script **sum_script.sh**. J' | ||
| + | #! /bin/bash | ||
| + | echo "Enter first number" | ||
| + | read number1 | ||
| + | echo "Enter second number" | ||
| + | read number2 | ||
| + | sum=$[number1 + number2] | ||
| + | echo "The sum is $sum"</ | ||
| + | |||
| + | Maintenant, lancez :< | ||
| + | #! /bin/bash | ||
| + | echo "Enter first number" | ||
| + | + echo 'Enter first number' | ||
| + | Enter first number | ||
| + | read number1 | ||
| + | + read number1 | ||
| + | 4 | ||
| + | echo "Enter second number" | ||
| + | + echo 'Enter second number' | ||
| + | Enter second number | ||
| + | read number2 | ||
| + | + read number2 | ||
| + | 8 | ||
| + | sum=$[number1 + number2] | ||
| + | + sum=12 | ||
| + | echo "The sum is $sum" | ||
| + | + echo 'The sum is 12' | ||
| + | The sum is 12</ | ||
| + | |||
| + | Les sorties **-x** et **-v** sont combinées comme indiqué dans l' | ||
| + | |||
| + | De même, nous pouvons combiner l' | ||
| + | |||
| + | Je remplace la variable number1 par num sur la sixième ligne du script :< | ||
| + | #! /bin/bash | ||
| + | echo "Enter first number" | ||
| + | read number1 | ||
| + | echo "Enter second number" | ||
| + | read number2 | ||
| + | sum=$[num + number2] | ||
| + | echo "The sum is $sum"</ | ||
| + | |||
| + | Pour afficher le résultat, exécutez la commande suivante :< | ||
| + | #! /bin/bash | ||
| + | echo "Enter first number" | ||
| + | Enter first number | ||
| + | read number1 | ||
| + | 5 | ||
| + | echo "Enter second number" | ||
| + | Enter second number | ||
| + | read number2 | ||
| + | 7 | ||
| + | sum=$[num + number2] | ||
| + | sum_script.sh: | ||
| ==== Comment rediriger le rapport de débogage vers un fichier ==== | ==== Comment rediriger le rapport de débogage vers un fichier ==== | ||
| + | L' | ||
| + | |||
| + | C'est un peu délicat car rediriger le rapport de débogage vers un fichier ; nous utilisons des variables spéciales. | ||
| + | |||
| + | Implémentons-le sur le code b_script.sh :< | ||
| + | #! /bin/bash | ||
| + | exec 5> debug_report.log | ||
| + | PS4=' | ||
| + | BASH_XTRACEFD=" | ||
| + | echo "Enter number1" | ||
| + | read number1 | ||
| + | echo "Enter number2" | ||
| + | read number2 | ||
| + | if [ " | ||
| + | then | ||
| + | echo " | ||
| + | elif [ " | ||
| + | then | ||
| + | echo " | ||
| + | else | ||
| + | echo " | ||
| + | fi</ | ||
| + | |||
| + | Dans la deuxième ligne de code, vous pouvez voir que nous redirigeons la sortie vers le fichier debug_report.log à l'aide de la commande exec avec le descripteur de fichier 5 (FD5). | ||
| + | |||
| + | * **exec 5> debug_report.log** : Dans exec , la commande redirige tout ce qui se passe dans le shell vers le fichier debug_report.log. | ||
| + | * **BASH_XTRACEFD = 5** : variable spécifique à bash qui ne peut être utilisée dans aucun autre shell. Un descripteur de fichier valide doit lui être attribué et bash écrira la sortie extraite dans debug_report.log. | ||
| + | * **PS4=' | ||
| + | |||
| + | Le script ci-dessus crée un fichier journal nommé debug_report.log, | ||
| + | + exec | ||
| + | + PS4=' | ||
| + | 4-- BASH_XTRACEFD=5 | ||
| + | Enter number1 | ||
| + | 4 | ||
| + | Enter number2 | ||
| + | 5 | ||
| + | Number2 is greater than Number1 | ||
| + | ...@...:~ $ cat debug_report.log | ||
| + | 5-- echo 'Enter number1' | ||
| + | 6-- read number1 | ||
| + | 7-- echo 'Enter number2' | ||
| + | 8-- read number2 | ||
| + | 9-- ' | ||
| + | 12-- ' | ||
| + | 16-- echo ' | ||
| + | </ | ||
| ===== Pré-requis ===== | ===== Pré-requis ===== | ||
| Ligne 366: | Ligne 515: | ||
| ===== Conclusion ===== | ===== Conclusion ===== | ||
| + | Un code plein d' | ||
| + | Le débogage est très important pour chaque programme car il le rend plus efficace.\\ | ||
| + | La détection de bogues existants et potentiels pendant le développement du programme peut empêcher un comportement inattendu dans votre programme.\\ | ||
| + | Les codes volumineux nécessitent généralement un débogage actif, ce qui améliore l' | ||
| + | |||
| + | De nombreux langages de programmation et frameworks ont leurs propres débogueurs compagnons.\\ | ||
| + | Les scripts bash peuvent implémenter diverses méthodes de débogage de script.\\ | ||
| + | Ce guide détaille toutes les méthodes qui peuvent être utilisées pour trouver des erreurs dans les scripts bash.\\ | ||
| + | Donc, chaque fois que vous sentez que votre script bash ne fonctionne pas comme prévu, utilisez l'une des méthodes mentionnées ci-dessus, mais dans la plupart des cas, le mode xtrace (-x) est très utile. | ||
| ===== Problèmes connus ===== | ===== Problèmes connus ===== | ||