GNU/Linux >> Tutoriels Linux >  >> Linux

Gestion des erreurs dans les scripts Bash

Le script est l'un des outils clés permettant à un administrateur système de gérer un ensemble d'activités quotidiennes telles que l'exécution de sauvegardes, l'ajout d'utilisateurs/de groupes, l'installation/la mise à jour de packages, etc. Lors de l'écriture d'un script, la gestion des erreurs est l'un des éléments cruciaux. choses à gérer.

Cet article présente quelques techniques de base/intermédiaires pour gérer la gestion des erreurs dans les scripts Bash. J'explique comment obtenir les codes d'erreur, obtenir une sortie détaillée lors de l'exécution du script, gérer la fonction de débogage et la redirection d'erreur standard. Grâce à ces techniques, les administrateurs système peuvent faciliter leur travail quotidien.

[ Les lecteurs ont également aimé : Les codes de sortie de la ligne de commande Bash démystifiés ]

État de sortie

Dans les scripts Bash, $? imprime l'état de sortie. S'il renvoie zéro, cela signifie qu'il n'y a pas d'erreur. S'il est différent de zéro, vous pouvez en conclure que la tâche précédente présente un problème.

Un exemple de base est le suivant :

$ cat myscript.sh
           #!/bin/bash
           mkdir learning
           echo $?

Si vous exécutez le script ci-dessus une fois, il affichera 0 car le répertoire n'existe pas, donc le script le créera. Naturellement, vous obtiendrez une valeur non nulle si vous exécutez le script une deuxième fois, comme indiqué ci-dessous :

$ sh myscript.sh
mkdir: cannot create directory 'learning': File exists
1

Bonnes pratiques

Il est toujours recommandé d'activer le mode débogage en ajoutant le -e option à votre script shell comme ci-dessous :

$ cat test3.sh
!/bin/bash
set -x
echo "hello World"
mkdiir testing
 ./test3.sh
+ echo 'hello World'
hello World
+ mkdiir testing
./test3.sh: line 4: mkdiir: command not found

Vous pouvez écrire une fonction de débogage comme ci-dessous, ce qui permet de l'appeler à tout moment, en utilisant l'exemple ci-dessous :

$ cat debug.sh
#!/bin/bash
_DEBUG="on"
function DEBUG()
{
 [ "$_DEBUG" == "on" ] && $@
}
DEBUG echo 'Testing Debudding'
DEBUG set -x
a=2
b=3
c=$(( $a + $b ))
DEBUG set +x
echo "$a + $b = $c"

Qui imprime :

$ ./debug.sh
Testing Debudding
+ a=2
+ b=3
+ c=5
+ DEBUG set +x
+ '[' on == on ']'
+ set +x
2 + 3 = 5

Redirection d'erreur standard

Vous pouvez rediriger toutes les erreurs système vers un fichier personnalisé à l'aide des erreurs standard, qui peuvent être désignées par le nombre 2 . Exécutez-le dans les commandes Bash normales, comme illustré ci-dessous :

$ mkdir users 2> errors.txt
$ cat errors.txt
mkdir: cannot create directory ‘users’: File exists

La plupart du temps, il est difficile de trouver le numéro de ligne exact dans les scripts. Pour imprimer le numéro de ligne avec l'erreur, utilisez la PS4 option (prise en charge avec Bash 4.1 ou version ultérieure). Exemple ci-dessous :

$ cat test3.sh
#!/bin/bash
PS4='LINENO:'

set -x
echo "hello World"
mkdiir testing

Vous pouvez facilement voir le numéro de ligne lors de la lecture des erreurs :

$ /test3.sh
5: echo 'hello World'
hello World
6: mkdiir testing
./test3.sh: line 6: mkdiir: command not found

[ Obtenez cet ebook gratuit :Gérer vos clusters Kubernetes pour les nuls. ]

Récapitulez

La gestion des erreurs est une compétence clé pour les administrateurs lors de l'écriture de scripts. Ces conseils devraient vous faciliter la vie lors du dépannage de scripts Bash ou même de commandes générales.


Linux
  1. Utilisation de Bash pour l'automatisation

  2. Utiliser l'extension .sh ou .bash pour les scripts bash ?

  3. Erreur de script bash :expression entière attendue ?

  4. Bash :erreur de syntaxe près du jeton inattendu `} ?

  5. Utilisation de la commande Linux Basename dans les scripts Bash

Bash Scripting - Analyser les arguments dans les scripts Bash à l'aide de getopts

Comment créer des documents avec des scripts Bash

Comment utiliser la commande echo dans les scripts Bash sous Linux

Dépannage de l'erreur "Bash :Commande introuvable" sous Linux

Utilisation de la commande Linux Dirname dans les scripts Bash

Bash Beginner Series #3 :Passer des arguments aux scripts Bash