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.