Script Bash : Gestion des erreurs

Script Bash : Gestion des erreurs - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 10-11-2010 à 09:11:07    

Salut,
 
Petite question concernant la gestion des erreurs.
Actuellement, dans la plupart de mes scripts, je gère les erreurs avec ce qui suit :

Code :
  1. #!/bin/sh
  2. exec 2>$LOGERR
  3. ...
  4. [Instructions]
  5. ...
  6. if [ -e $LOGERR ]
  7. then
  8. mail -s "Attention, une erreur s'est produite..." admins@domain.tld < $LOGERR
  9. fi


 
Bon, je me doute que ce n'est pas forcément la meilleure manière de gérer les erreurs et c'est pour cela que je poste içi.
Selon vous, qu'elle est, si il y en a une, la meilleure façon de gérer les erreurs dans un script Bash ?
Le gros inconvénient de ma méthode est que ce n'est pas vraiment une gestion des erreurs dans le sens où je teste la présence d'erreurs seulement à la fin de mon script... Du coup, toutes les instructions de mon script sont lancées, peu importe les erreurs rencontrées. Il faudrait plutôt que j'utilise "set -e" ou quelque chose dans le genre pour que mon script stoppe à la première erreur rencontrée mais dans ce cas quid de la notification par mail ?


Message édité par jaymzwise le 10-11-2010 à 10:38:57
Reply

Marsh Posté le 10-11-2010 à 09:11:07   

Reply

Marsh Posté le 10-11-2010 à 09:51:58    

Alors :
 
"echo $?" te renvoie le code de sortie de chaque commande (0 si OK, d'autres codes selon l'erreur)
 
donc tu peux par exemple écrire la fonction suivante :

Code :
  1. gestion_retour() {
  2.         if [ $1 -eq 0 ]; then
  3.                 echo " ... OK"
  4.         else
  5.                 echo " ... ERREUR"
  6.                 exit 1
  7.         fi
  8. }


 
et ensuite placer l'appel de cette fonction après chaque commande passée :

Code :
  1. gestion_retour $?

Reply

Marsh Posté le 10-11-2010 à 10:23:53    

Merci pour la suggestion slywalker ;)
Finalement je pense que j'ai trouvé mon bonheur, la commande trap qui permet d'appeler une fonction ou lancer une commande en cas d'erreur par exemple :)
Du coup le code ressemblerait à ça :

Code :
  1. #!/bin/sh
  2. exec 2>$LOGERR
  3. trap 'err_handler' ERR
  4. function err_handler {
  5.         mail -s TestErreur admins@domain.tld < $LOGERR
  6.         exit 1
  7. }
  8. ...
  9. [Instructions]
  10. ...


Apparemment ça tourne correctement, si je mets deux lignes de commande et que la première contient une erreur la deuxième n'est pas lancée, le script s'arrête bien et le mail est envoyé :)


Message édité par jaymzwise le 10-11-2010 à 10:46:24
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed