Comment déboguer un script bash ?

How Debug Bash Script




Tout programme doit être exempt d'erreurs avant d'atteindre les consommateurs. Les développeurs de logiciels font de leur mieux pour que les logiciels soient exempts de bogues. Mais il est difficile de faire un code irréprochable quand il y a des milliers de lignes. Le débogage est un processus continu ; il aide à détecter immédiatement les erreurs, à collecter des informations précieuses sur le code et à éliminer les morceaux de code redondants.

Tous les langages de programmation ont des approches communes et quelques approches distinctes pour trouver des bogues. Par exemple, les programmes de débogage peuvent être utilisés pour supprimer rapidement les erreurs. Alors que les scripts shell n'ont pas d'outil particulier pour déboguer le code. Cet article traite de diverses techniques de débogage pouvant être utilisées pour rendre le script bash sans erreur. Avant de plonger dans les méthodes, ayons une compréhension de base des shells et des scripts shell :







Qu'est-ce que le shell sous Linux ?

Lorsque vous démarrez votre ordinateur, le noyau obtient des informations sur le matériel connecté et permet aux autres composants connectés d'interagir. En dehors de cela, il gère la mémoire, le CPU et reconnaît tout nouveau périphérique. Dans l'ensemble, un noyau est l'épine dorsale de tout système d'exploitation. Mais avez-vous déjà pensé à interagir directement avec le noyau, lui commander d'effectuer une tâche spécifique ? Est-ce même possible de le faire ? Absolument! A l'aide d'un shell, un programme informatique avec une interface interactive, n'importe qui peut faire fonctionner le noyau. Le shell permet aux humains d'interagir avec le noyau et de lui demander d'effectuer n'importe quelle tâche.



Sous Unix, il existe deux shells principaux Coquille Bourne et coque C . Ces deux types ont leurs sous-catégories. Différents types de coquillages Bourne sont Coquille Korn (ksh), coquille Almquist (cendre), coquille Bourne again (bash), et Coquille Z (zsh) . Dans le même temps, le shell C a ses propres sous-catégories comme C shell (csh) et Coque TENEX C (tcsh) . Comme mentionné ci-dessus, de toutes les coquilles, Bash (Bourne à nouveau shell) est le shell le plus largement utilisé et sort de la boîte dans de nombreuses distributions Linux en raison de son efficacité et de sa convivialité.



Bash est le shell par défaut de nombreuses distributions Linux et est largement utilisé par des millions d'utilisateurs Linux. Il est si diversifié et influent qu'il peut effectuer toutes les tâches que vous effectuez habituellement dans les applications basées sur l'interface graphique. Vous pouvez modifier des fichiers, gérer des fichiers, afficher des photos, écouter de la musique, lire des vidéos et bien plus encore.





Qu'est-ce qu'un script shell :

Comme nous avons appris l'idée de base du shell, passons maintenant aux scripts shell. Le script shell est un programme informatique qui exécute plusieurs commandes dans un shell qui agit comme un interpréteur pour exécuter une fonction spécifique. Comme indiqué ci-dessus, il existe 2 types particuliers de coques. Cependant, ce guide se concentre sur le shell Bourne Again (Bash).
Alors, qu'est-ce qu'un script bash ? Sous Linux, toutes les commandes bash sont stockées dans /usr/bin et /bin Dossiers. Par exemple, chaque fois que vous exécutez une commande, bash recherche si elle existe ou non dans le répertoire. La commande est exécutée si elle trouve dans les répertoires sinon donne une erreur.

Que diriez-vous d'effectuer une tâche qui nécessite plusieurs commandes pour s'exécuter dans le terminal ? Dans cette situation spécifique, les scripts bash peuvent vous aider. Le script Bash est une forme de script shell qui vous permet de créer des programmes pour exécuter plusieurs commandes bash pour effectuer une tâche spécifique.



Quels sont les bogues dans les scripts bash :

Lorsque vous travaillez avec des scripts bash ou avec tout autre langage de programmation, vous rencontrez de nombreuses erreurs. Un bogue est une erreur ou un défaut dans le programme qui peut entraîner un comportement incorrect du programme.

Chaque langage de programmation a sa propre procédure pour trouver les bogues ; de même, bash a également de nombreuses options intégrées pour déboguer un programme de terminal.

La gestion des erreurs et le débogage d'un programme n'est rien de moins qu'une corvée. C'est un travail qui prend du temps et peut s'aggraver si vous ne connaissez pas les bons outils pour déboguer votre programme. Cet article est un guide complet sur le débogage des scripts bash pour rendre votre script sans erreur. Commençons donc :

Comment déboguer un script bash :

Lorsque vous travaillez sur de gros projets de programmation, vous rencontrez de nombreuses erreurs ou bugs. Déboguer un programme peut parfois être compliqué. Les programmeurs utilisent généralement des outils de débogage, et de nombreux éditeurs de code aident également à trouver des bogues en mettant en évidence la syntaxe.

Il existe divers outils sous Linux pour déboguer des codes, par exemple, GNU Debugger aka gdb. Des outils comme GDB sont utiles pour les langages de programmation qui se compilent en binaires. Puisque bash est un langage interprété simple, il n'y a pas besoin d'outils lourds pour le déboguer.

Il existe diverses techniques traditionnelles pour déboguer un code de script bash, et l'une d'entre elles consiste à ajouter Affirmations. Les assertions sont des conditions qui sont ajoutées dans les programmes pour vérifier des conditions spécifiques et exécuter le programme en conséquence. C'est une technique défensive qui aide à trouver des bogues et à tester également. Vous pouvez trouver de nombreux outils qui aident à ajouter des assertions dans les scripts bash.

Eh bien, ajouter des affirmations est l'une des anciennes techniques traditionnelles. Il existe des ensembles d'indicateurs/options disponibles dans bash pour déboguer un script bash. Ces options peuvent être ajoutées avec shebang dans les scripts ou ajoutées lors de l'exécution du programme dans le terminal. Les sujets que nous allons aborder sont énumérés ci-dessous :

  1. Comment déboguer le script bash en activant verbeux -v option
  2. Comment déboguer un script bash en utilisant xtrace -x option
  3. Comment déboguer un script bash en utilisant noexec -n option
  4. Comment identifier le variables non définies lors du débogage du script bash
  5. Comment déboguer le partie spécifique du script bash
  6. Comment déboguer un script bash en utilisant le piéger commander
  7. Comment déboguer un script bash en éliminant globalisation de fichiers en utilisant le -F option
  8. Comment combiner options de débogage pour déboguer un script shell
  9. Comment rediriger le rapport de débogage dans un fichier

Voyons donc différentes techniques dans bash pour déboguer un script bash :

1. Comment déboguer le script bash en activant l'option verbose -v :

L'une des approches les plus simples pour déboguer le script bash consiste à utiliser le -v option, également connue sous le nom de verbeux. L'option peut être ajoutée avec le shebang ou explicitement placée avec le nom du fichier de script lors de son exécution. L'option verbeuse exécutera et imprimera chaque ligne du code en tant que processus par l'interpréteur. Comprenons-le avec un exemple de script bash :

# ! /bin/bash
chassèrent « Entrez le numéro1 »
lirenuméro 1
chassèrent « Entrez le numéro2 »
lirenuméro 2
si [ '$nombre1' -gt '$nombre2' ]
alors
chassèrent 'Numéro1 est supérieur à Numéro2'
elif [ '$nombre1' -eq '$nombre2' ]
alors
chassèrent 'Numéro1 est égal à Number2'
autre
chassèrent 'Numéro2 est supérieur à Numéro1'
être

Le code ci-dessus obtient deux nombres de l'utilisateur, puis effectue des instructions conditionnelles pour vérifier si le nombre est plus significatif, inférieur ou égal à l'autre nombre entré. Bien que n'importe quel éditeur de texte puisse être utilisé pour les scripts bash, j'utilise l'éditeur Vim. Vim est un éditeur puissant et riche en fonctionnalités qui met en évidence la syntaxe des scripts bash et réduit les risques d'erreurs de syntaxe. Si vous n'avez pas l'éditeur Vim, obtenez-le en exécutant la commande mentionnée ci-dessous :

$sudoapteinstaller je suis venu

Créez un fichier de script bash en utilisant :

$je suis venub_script.sh

Si vous êtes nouveau dans l'éditeur Vim, je vous recommande d'apprendre comment utiliser l'éditeur vim avant de procéder.

Maintenant, revenons au script, exécutez le script en utilisant -v option:

$frapper -vb_script.sh

On peut voir dans la sortie ci-dessus que chaque ligne du script est imprimée dans le terminal lors de son traitement par l'interpréteur. Notez que le script cessera de prendre les entrées de l'utilisateur, puis traitera la ligne suivante du script. Comme discuté ci-dessus que le -v L'option peut être placée après shebang comme indiqué ci-dessous :

# ! / bin / bash -v

De même, le drapeau verbeux peut également être ajouté dans la ligne suivante de shebang en utilisant le ensemble commander:

# ! /bin/bash
ensemble -v

Toutes les méthodes décrites ci-dessus peuvent activer le verbeux.

2 Comment déboguer le script bash à l'aide de l'option xtrace -x :

La trace d'exécution, également connue sous le nom de xtrace, est une option de débogage intelligente et utile, en particulier pour tracer les erreurs logiques. Les erreurs logiques sont généralement associées aux variables et aux commandes. Pour vérifier l'état de la variable lors de l'exécution du script, on utilise le -X option. Maintenant encore, exécutez le b_script.sh dossier avec le -X drapeau:

$frapper -Xb_script.sh

La sortie affiche explicitement la valeur de chaque variable pendant le processus d'exécution. Encore une fois, le -X peut être utilisé à côté du shebang et après la ligne shebang en utilisant la commande set. L'xtrace met le signe + à chaque ligne du script.

3 Comment déboguer le script bash à l'aide de l'option noexec -n :

Les erreurs de syntaxe sont l'une des principales causes de bogues. Pour déboguer syntaxiquement le script bash, nous utilisons noexec mode (pas d'exécution). L'option utilisée pour le mode noexec est -n. Il n'affichera que les erreurs de syntaxe du code au lieu de l'exécuter. Une approche beaucoup plus sûre pour déboguer le code. Exécutons b_script.sh encore avec le -n option:

$frapper -nb_script.sh

Il n'y aura pas d'exécution de code s'il n'y a pas d'erreur de syntaxe. Maintenant, modifions notre code :

# ! /bin/bash

chassèrent « Entrez le numéro1 »
lirenuméro 1
chassèrent « Entrez le numéro2 »
lirenuméro 2
si [ '$nombre1' -gt '$nombre2' ]
alors
chassèrent 'Numéro1 est supérieur à Numéro2'
elif [ '$nombre1' -eq '$nombre2' ]
#alors
chassèrent 'Numéro1 est égal à Number2'
autre
chassèrent 'Numéro2 est supérieur à Numéro1'
être

je commente alors après elif . Maintenant, avec -n execute b_script.sh scénario:

$frapper -nb_script.sh

Comme prévu, il a clairement identifié l'erreur et l'a affichée dans le terminal.

4 Comment identifier les variables non définies lors du débogage du script bash :

Faire une faute de frappe lors de l'écriture d'un code est courant. Souvent, vous saisissez mal une variable, ce qui ne permet pas au code de s'exécuter. Pour identifier une telle erreur, nous utilisons le -u option. Modifions à nouveau le code :

# ! /bin/bash
chassèrent « Entrez le numéro1 »
lirenuméro 1
chassèrent « Entrez le numéro2 »
lirenuméro 2
si [ '$num1' -gt '$nombre2' ]
alors
chassèrent 'Numéro1 est supérieur à Numéro2'
elif [ '$nombre1' -eq '$nombre2' ]
alors
chassèrent 'Numéro1 est égal à Number2'
autre
chassèrent 'Numéro2 est supérieur à Numéro1'
être

En premier si instruction conditionnelle, j'ai renommé le numéro 1 variable à nombre1 . Maintenant nombre1 est une variable non définie. Exécutez maintenant le script :

$frapper -ub_script.sh

La sortie a identifié et affiche explicitement le nom d'une variable non définie.

5. Comment déboguer la partie spécifique du script bash :

Le mode xtrace traite chaque ligne du code et donne une sortie. Cependant, trouver des erreurs dans un code volumineux prendrait du temps si nous savons déjà quelle partie est potentiellement à l'origine de l'erreur. Heureusement, xtrace vous permet également de déboguer une partie spécifique du code, ce qui peut être accompli en utilisant le ensemble commander. Endroit définir -x au début de la partie qui doit être déboguée, puis définir +x à la fin. Par exemple, je veux déboguer les instructions conditionnelles de b_script.sh , je vais donc inclure toutes les instructions conditionnelles dans définir -x et définir +x options comme indiqué dans le code ci-dessous :

# ! /bin/bash
chassèrent « Entrez le numéro1 »
lirenuméro 1
chassèrent « Entrez le numéro2 »
lirenuméro 2
ensemble -X
si [ '$ nombre' -gt '$nombre2' ]
alors
chassèrent 'Numéro1 est supérieur à Numéro2'
elif [ '$nombre1' -eq '$nombre2' ]
alors
chassèrent 'Numéro1 est égal à Number2'
autre
chassèrent 'Numéro2 est supérieur à Numéro1'
être
ensemble+ x

Maintenant, exécutez le script en utilisant bash b_script.sh .

La sortie ne débogue que les conditions if comme spécifié.

6. Comment déboguer un script bash à l'aide de la commande trap :

Si votre script est compliqué, il existe également des techniques plus élaborées pour le débogage. L'un d'eux est le piéger commander. Les piéger La commande capte les signaux et exécute une commande lorsqu'une situation spécifique se produit. La commande peut être un signal ou une fonction. J'ai créé un autre script du nom de somme_script.sh :

# ! /bin/bash
piéger 'echo 'Ligne ${LINENO} : le premier nombre est $number1 , le deuxième nombre est $number2 et la somme est $sum' 'DÉBOGUER
chassèrent « Entrez le premier numéro »
lirenuméro 1
chassèrent « Entrez le deuxième numéro »
lirenuméro 2
somme= $[nombre1 + nombre2]
chassèrent 'la somme estsomme $'

Les piéger commande avec DÉBOGUER signal affiche l'état des variables numéro 1 , numéro 2 et somme après l'exécution de chaque ligne comme indiqué dans l'image de sortie suivante :

Les blocs jaunes sont des espaces vides car l'utilisateur n'a encore entré aucune entrée ; ces espaces se rempliront au fur et à mesure que l'utilisateur saisira des valeurs. Cette méthode est également très utile pour déboguer les scripts bash.

7. Comment déboguer un script bash en éliminant l'agrégation de fichiers à l'aide de l'option -f :

La globalisation de fichiers est un processus de recherche des fichiers avec des caractères génériques, c'est-à-dire, * et ? . Dans de nombreuses situations, vous n'avez pas besoin de développer les fichiers pendant le débogage. Dans de tels cas, vous pouvez bloquer l'agrégation de fichiers à l'aide de la -F option. Comprenons-le avec un script fglobe_script.sh :

# ! /bin/bash
chassèrent 'Afficher tous les fichiers texte.'
ls *.SMS

Le code ci-dessus affichera tous les fichiers texte dans le répertoire actuel, exécutez :

$frapperfglobe_script.sh

Pour désactiver le regroupement de fichiers, utilisez le -F option:

$frapper -Ffglobe_script.sh

De même, vous pouvez l'utiliser avec le shebang et avec le ensemble commande aussi :

# ! /bin/bash
chassèrent 'Afficher tous les fichiers texte.'
ls *.SMS
ensemble -F
chassèrent 'Afficher tous les fichiers texte'
ls *.SMS
ensemble+f

Maintenant, cours bash fglobe_script.sh :

La partie jointe à ensemble -f/ensemble +f options ne traitaient pas les commandes avec des caractères génériques.

8. Comment combiner les options de débogage pour déboguer le script shell :

Nous n'utilisons qu'une seule option dans les techniques de débogage mentionnées ci-dessus, mais nous pouvons combiner différentes options pour une meilleure compréhension. Mettons en œuvre -X et -v options à la somme_script.sh scénario. j'utilise le somme_script.sh scénario.

# ! /bin/bash
chassèrent « Entrez le premier numéro »
lirenuméro 1
chassèrent « Entrez le deuxième numéro »
lirenuméro 2
somme= $[nombre1 + nombre2]
chassèrent 'la somme estsomme $'

Exécutez maintenant :

$frapper -xvsomme_script.sh

Les deux -X et -v les sorties sont combinées, comme indiqué dans l'image de sortie. De même, on peut aussi combiner les -u option avec verbose -v pour la détection d'erreurs. je remplace le numéro 1 variable avec sur une à la sixième ligne du script :

# ! /bin/bash
est$nombre2etsommeestsomme $' ' DEBOGUER
chassèrent '
Entrez le premier numéro'
lire numéro1
chassèrent '
Entrez le deuxième numéro'
lire numéro2
somme=$[num + nombre2]
chassèrent '
lessommeestsomme $'

Pour afficher le résultat, exécutez la commande mentionnée ci-dessous :

$frapper -uvsomme_script.sh

9. Comment rediriger le rapport de débogage vers un fichier :

L'enregistrement d'un rapport de débogage d'un script bash dans un fichier peut être utile dans de nombreuses situations. C'est un peu délicat car rediriger le rapport de débogage vers un fichier ; nous utilisons des variables spéciales. Mettons-le en œuvre sur b_script.sh code:

# ! /bin/bash
l'exécutif 5>dubug_report.log
BASH_XTRACED='5'
PS4='$ LINENO--'
chassèrent « Entrez le numéro1 »
lirenuméro 1
chassèrent « Entrez le numéro2 »
lirenuméro 2
si [ '$ nombre' -gt '$nombre2' ]
alors
chassèrent 'Numéro1 est supérieur à Numéro2'
elif [ '$nombre1' -eq '$nombre2' ]
alors
chassèrent 'Numéro1 est égal à Number2'
autre
chassèrent 'Numéro2 est supérieur à Numéro1'
être

Dans la deuxième ligne du code, on peut voir que nous redirigeons la sortie vers un debug_report.log fichier en utilisant le l'exécutif commande avec le descripteur de fichier 5 (FD5).

exec 5> debug_report.log : Les l'exécutif la commande redirige tout ce qui se passe dans le shell vers un fichier debug_report.log.

BASH_XTRACEFD=5 : C'est un variable bash particulière et ne peut être utilisé dans aucun autre shell. Un descripteur de fichier valide doit lui être attribué et bash écrira la sortie extraite dans debug_report.log.

PS4=’$LINENO– ': C'est également une variable bash utilisée pour imprimer le numéro de ligne lors du débogage en utilisant le mode xtrace. La valeur par défaut de la PS4 est le + signe

Le script ci-dessus génère un fichier journal appelé debug_report.log, pour le lire, utilisez le chat commander:

Conclusion:

Un code plein de bogues peut affecter les performances du programme et nuire également au matériel. Le débogage est très crucial pour chaque programme car il rend le programme plus efficace. La recherche d'erreurs existantes et potentielles lors du développement d'un programme peut empêcher votre programme de se comporter de manière inattendue. Les codes volumineux nécessitent généralement un débogage actif, ce qui améliore l'efficacité du code en éliminant les morceaux de code gourmands en ressources.

De nombreux langages et environnements de programmation ont leurs propres débogueurs compagnons. Dans les scripts bash, diverses techniques peuvent être implémentées pour déboguer le script. Ce guide s'est concentré sur toutes les méthodes qui peuvent être utilisées pour trouver des bogues dans les scripts bash. Donc, chaque fois que vous sentez que votre script bash ne se comporte pas comme prévu, utilisez l'une des techniques mentionnées ci-dessus, mais le mode xtrace (-x) est très utile dans la plupart des cas.