Comment déboguer un script bash?

Comment déboguer un script bash?

Tout programme doit être exempt d'erreurs avant d'atteindre les consommateurs. Les développeurs de logiciels font de leur mieux pour rendre les logiciels sans bug. Mais il est difficile de faire un code sans faute quand il y a des milliers de lignes. Le débogage est un processus en cours; Il aide à détecter immédiatement les erreurs, à collecter des informations précieuses sur le code et à éliminer les morceaux de code redondant.

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

Quelle est la coque en Linux?

Lorsque vous démarrez votre ordinateur, le noyau obtient des informations sur le matériel attaché et permet à d'autres composants connectés d'interagir. En dehors de cela, il gère la mémoire, le processeur 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, la commandez pour effectuer une tâche spécifique? Est-il même praticable de le faire? Absolument! À l'aide d'un shell, un programme informatique avec une interface interactive, tout le monde peut faire fonctionner le noyau. La coquille permet aux humains d'interagir avec le noyau et de lui demander d'effectuer n'importe quelle tâche.

Dans Unix, il y a deux coquilles principales Obus de Bourne et Coquille C. Ces deux types ont leurs sous-catégories. Différents types de coquilles de Bourne sont Korn Shell (KSH), Almquist Shell (Ash), Bourne Again Shell (bash), et Z Shell (Zsh). En 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, parmi tous les obus, Bash (Bourne Again Shell) est le shell le plus 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 de Linux. Il est si diversifié et influent qu'il peut effectuer toutes les tâches que vous effectuez habituellement dans des 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 de Shell, allons maintenant vers les scripts de coquille. Le script shell est un programme informatique qui exécute plusieurs commandes dans un shell qui agit comme un interprète pour effectuer une fonction spécifique. Comme discuté ci-dessus, il existe 2 types particuliers de coquilles. Cependant, ce guide se concentre sur le Bourne à nouveau Shell (bash).
Alors qu'est-ce qu'un script bash? Dans 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 s'il existe dans le répertoire ou non. La commande est exécutée si elle trouve dans les répertoires d'autre donne une erreur.

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

Quels sont les bogues dans les scripts bash:

En travaillant 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 faire en sorte que le programme se comporte de manière incorrecte.

Chaque langage de programmation a sa propre procédure pour trouver des bogues; De même, Bash a également de nombreuses options de réactualisation pour déboguer un programme terminal.

Gérer les erreurs et déboguer un programme n'est pas moins qu'un tracas. C'est un travail long et peut aggraver si vous n'êtes pas au courant des bons outils pour déboguer votre programme. Cet article est un guide complet sur le débogage des bash-scripts pour rendre votre script sans erreur. Alors commençons:

Comment déboguer un script bash:

Lorsque vous travaillez sur de grands projets de programmation, vous rencontrez de nombreuses erreurs ou bogues. Le débogage d'un programme peut parfois être compliqué. Les programmeurs utilisent généralement des outils de débogage, et de nombreux éditeurs de code contribuent également à la recherche de bogues en mettant en évidence la syntaxe.

Il existe différents outils dans Linux pour déboguer les codes, par exemple, GNU Debugger aka «GDB.«Des outils comme GDB sont utiles pour les langages de programmation qui se compilent en binaires. Étant donné que Bash est une langue interprétée 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'elles ajoute «Affirmation." Les affirmations sont des conditions qui sont ajoutées dans les programmes pour vérifier les conditions spécifiques et exécuter le programme en conséquence. Il s'agit d'une technique défensive qui aide à trouver des bugs et des tests également. Vous pouvez trouver de nombreux outils qui aident à ajouter des affirmations dans les scripts bash.

Eh bien, ajouter des assertions est l'une des anciennes techniques traditionnelles. Il existe des ensembles de drapeaux / options disponibles en 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 répertoriés ci-dessous:

  1. Comment déboguer le script bash en activant Verbose "-v" option
  2. Comment déboguer le script bash en utilisant xtrace "-x" option
  3. Comment déboguer le script bash en utilisant NOEXEC "-N" option
  4. Comment identifier le Variables non finies Tout en débogues Bash Script
  5. Comment déboguer le partie spécifique du script bash
  6. Comment déboguer un script bash en utilisant le "piège" commande
  7. Comment déboguer un script bash en éliminant fichier global en utilisant le "-F" option
  8. Comment combiner Options de débogage pour déboguer un script shell
  9. Comment rediriger le débogage à un fichier

Vérifions donc diverses techniques de bash pour déboguer un script bash:

Comment déboguer le script bash en activant l'option "-v" verbeux:

L'une des approches les plus faciles pour déboguer le script bash est l'utilisation du "-V" option, également connue sous le nom de verbose. L'option peut être ajoutée avec le shebang ou explicitement mis avec le nom du fichier de script lors de l'exécution. L'option Verbose exécutera et imprimera chaque ligne du code comme processus par l'interprète. Comprenons-le avec un exemple de script bash:

#! / bac / bash
Echo "Entrez numéro1"
Lire numéro1
Echo "Entrez le numéro2"
Lire numéro2
Si ["$ numéro1" -gt "$ numéro2"]
alors
Echo "Number1 est supérieur à Number2"
ELIF ["$ NUBER1" -EQ "$ NUBER2"]
alors
Echo "Number1 est égal à Number2"
autre
Echo "Number2 est supérieur à Number1"
Fi

Le code ci-dessus obtient deux nombres de l'utilisateur, puis effectuer certaines instructions conditionnelles pour vérifier si le nombre est plus significatif, moins ou égal à l'autre numéro entré. Bien que tout é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 chances d'erreurs de syntaxe. Si vous n'avez pas d'éditeur VIM, obtenez-le en exécutant la commande mentionnée ci-dessous:

$ sudo apt install vim

Créer un fichier de script bash en utilisant:

$ vim b_script.shot

Si vous êtes nouveau dans l'éditeur VIM, je vous recommande d'apprendre à utiliser l'éditeur VIM avant de continuer.

Maintenant, retour au script, exécutez le script en utilisant "-V" option:

$ bash -v b_script.shot

On peut voir dans la sortie ci-dessus que chaque ligne du script est imprimée dans le terminal lorsqu'ils traitent par l'interprète. 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é dans ce qui suit:

#! / bac / bash -v

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

#! / bac / bash
Set -v

L'une des méthodes discutées ci-dessus peut permettre à Verbose.

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 pendant l'exécution du script, nous utilisons le "-X" option. Maintenant encore, exécutez le "B_Script.sh ” fichier avec le "-X" drapeau:

$ bash -x b_script.shot

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. Le xtrace met le signe «+» avec 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» (pas d'exécution) Mode. L'option utilisée pour le mode NOEXEC est «-N." Il affichera uniquement 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:

$ bash -n b_script.shot

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

#! / bac / bash
Echo "Entrez numéro1"
Lire numéro1
Echo "Entrez le numéro2"
Lire numéro2
Si ["$ numéro1" -gt "$ numéro2"]
alors
Echo "Number1 est supérieur à Number2"
ELIF ["$ NUBER1" -EQ "$ NUBER2"]
#alors
Echo "Number1 est égal à Number2"
autre
Echo "Number2 est supérieur à Number1"
Fi

Je commente "alors" après "Elif". Maintenant, avec «-n» exécuter "B_Script.sh ” scénario:

$ bash -n b_script.shot

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 tapez une variable, qui ne laisse pas le code exécuter. Pour identifier une telle erreur, nous utilisons le "-U" option. Modifions à nouveau le code:

#! / bac / bash
Echo "Entrez numéro1"
Lire numéro1
Echo "Entrez le numéro2"
Lire numéro2
Si ["$ num1" -gt "$ numéro2"]
alors
Echo "Number1 est supérieur à Number2"
ELIF ["$ NUBER1" -EQ "$ NUBER2"]
alors
Echo "Number1 est égal à Number2"
autre
Echo "Number2 est supérieur à Number1"
Fi

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

$ bash -u b_script.shot

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

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

Le mode XTrace traite chaque ligne du code et donne la sortie. Cependant, trouver des erreurs dans un code important serait longue si nous savons déjà quelle partie provoque l'erreur. Heureusement, XTrace vous permet également de déboguer une partie spécifique du code, qui peut être accompli en utilisant le "ensemble" commande. Lieu "Set -x" au début de la partie qui doit être débogue et ensuite "Set + X" à la fin. Par exemple, je souhaite déboguer les déclarations conditionnelles de "B_Script.sh ”, donc je joindreai toutes les déclarations conditionnelles dans "Set -x" et "Set + X" Options comme indiqué dans le code ci-dessous:

#! / bac / bash
Echo "Entrez numéro1"
Lire numéro1
Echo "Entrez le numéro2"
Lire numéro2
set -x
Si ["$ numéro" -gt "$ numéro2"]
alors
Echo "Number1 est supérieur à Number2"
ELIF ["$ NUBER1" -EQ "$ NUBER2"]
alors
Echo "Number1 est égal à Number2"
autre
Echo "Number2 est supérieur à Number1"
Fi
Définir + x

Maintenant, exécutez le script en utilisant "Bash B_Script.sh ”.

La sortie ne fait que déboguer les conditions IF comme spécifié.

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

Si votre script est compliqué, il existe également plus de techniques élaborées pour le débogage. L'un d'eux est le "piège" commande. Le "piège" La commande attrape 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 «Sum_script.sh ”:

#! / bac / bash
Trap 'echo "line $ lineno: le premier numéro est $ numéro1, le deuxième numéro est $ numéro2 et la somme est $ su"'
Echo "Entrez le premier numéro"
Lire numéro1
Echo "Entrez le deuxième numéro"
Lire numéro2
sum = $ [nombre1 + nombre2]
écho "la somme est $ sum"

Le "piège" commander avec "DÉBOGUER" Signal Afficher 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 saisi aucune entrée; Ces espaces se rempliront lorsque l'utilisateur entre les valeurs. Cette méthode est également très utile pour déboguer les scripts bash.

Comment déboguer un script bash en éliminant le globbing de fichiers à l'aide de l'option «-f»:

Fichier Globbing est un processus de recherche des fichiers avec des caractères génériques, je.e., "*" et "?". Dans de nombreuses situations, vous n'avez pas besoin d'élargir les fichiers lors du débogage. Dans de tels cas, vous pouvez bloquer le fichier global en utilisant le "-F" option. Comprenons-le avec un script «FGLOBE_Script.sh ”:

#! / bac / bash
ECHO "Afficher tous les fichiers texte."
LS *.SMS

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

$ bash fglobe_script.shot

Pour désactiver le gibotage du fichier, utilisez le "-F" option:

$ bash -f fglobe_script.shot

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

#! / bac / bash
ECHO "Afficher tous les fichiers texte."
LS *.SMS
set -f
ECHO "Afficher tous les fichiers texte"
LS *.SMS
Définir + F

Maintenant, courez «Bash fglobe_script.sh ”:

La partie enfermée avec "Set -f / set + f" Les options n'ont pas traité de commandes avec des caractères génériques.

Comment combiner les options de débogage pour déboguer Shell Script:

Nous utilisons une seule option dans les techniques de débogage susmentionnées, mais nous pouvons combiner diverses options pour une meilleure compréhension. Mettons en œuvre "-X" et "-V" Options au «Sum_script.sh ” scénario. J'utilise le «Sum_script.sh ” scénario.

#! / bac / bash
Echo "Entrez le premier numéro"
Lire numéro1
Echo "Entrez le deuxième numéro"
Lire numéro2
sum = $ [nombre1 + nombre2]
écho "la somme est $ sum"

Maintenant exécuter:

$ bash -xv sum_script.shot

Les deux "-X" et "-V" Les sorties sont combinées, comme affiché dans l'image de sortie. De même, nous pouvons également combiner le "-U" Option avec «-v» verbeux pour la détection des erreurs. Je remplace le "numéro 1" variable avec "Num" Dans la sixième ligne du script:

#! / bac / bash
est $ numéro2 et la somme est $ SUM "'Debug
Echo "Entrez le premier numéro"
Lire numéro1
Echo "Entrez le deuxième numéro"
Lire numéro2
sum = $ [num + nombre2]
écho "la somme est $ sum"

Pour afficher la sortie, exécutez la commande mentionnée ci-dessous:

$ bash -UV sum_script.shot

Comment rediriger le débogage-rapport vers un fichier:

Sauver un rapport de débogage d'un script bash à un fichier peut être pratique dans de nombreuses situations. C'est un peu délicat car pour rediriger le débogage-rapport vers un fichier; Nous utilisons des variables spéciales. Implémentons-le sur "B_Script.sh ” code:

#! / bac / bash
exec 5> dubug_report.enregistrer
Bash_xtraced = "5"
Ps4 = '$ lineno--'
Echo "Entrez numéro1"
Lire numéro1
Echo "Entrez le numéro2"
Lire numéro2
Si ["$ numéro" -gt "$ numéro2"]
alors
Echo "Number1 est supérieur à Number2"
ELIF ["$ NUBER1" -EQ "$ NUBER2"]
alors
Echo "Number1 est égal à Number2"
autre
Echo "Number2 est supérieur à Number1"
Fi

Dans la deuxième ligne du code, on peut voir que nous redirigeons la sortie vers un «Debug_Report.enregistrer" fichier à l'aide du «Exec» Commande avec Fichier Descripteur 5 (FD5).

exec 5> debug_report.enregistrer: Le «Exec» La commande redirige tout ce qui se passe dans le shell vers un fichier «Debug_Report.enregistrer."

Bash_xtracefd = ”5”: C'est une variable bash particulière et ne peut être utilisée dans aucun autre shell. Il doit se voir attribuer un descripteur de fichiers valide, et Bash écrira la sortie extraite pour «Debug_Report.enregistrer."

Ps4 = '$ lineno- ': Il s'agit également d'une variable bash utilisée pour imprimer le numéro de ligne lors du débogage à l'aide du mode XTrace. La valeur par défaut de PS4 est le "+" signe

Le script ci-dessus génère un fichier journal appelé «Debug_Report.enregistrer," Pour le lire, utilisez le "chat" commande:

Conclusion:

Un code plein de bogues peut également affecter les performances du programme et nocif pour le matériel. Le débogage est très crucial pour chaque programme car il rend le programme plus efficace. Trouver des erreurs existantes et potentielles pendant le développement d'un programme peut empêcher votre programme de se comporter de façon inattendue. Les grands codes nécessitent généralement un débogage actif, améliorant l'efficacité du code en éliminant les recours consommant des morceaux de code.

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 bugs dans les scripts bash. Ainsi, 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 assez utile dans la plupart des cas.