Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1594 connectés 

  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Script Bash : Gestion des erreurs

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Script Bash : Gestion des erreurs

n°1249227
jaymzwise
Posté le 10-11-2010 à 09:11:07  profilanswer
 

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
mood
Publicité
Posté le 10-11-2010 à 09:11:07  profilanswer
 

n°1249245
slywalker
Posté le 10-11-2010 à 09:51:58  profilanswer
 

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 $?

n°1249261
jaymzwise
Posté le 10-11-2010 à 10:23:53  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Linux et OS Alternatifs
  Codes et scripts

  Script Bash : Gestion des erreurs

 

Sujets relatifs
Problème d'exécution script bashscript de demarrage sous solaris10
[Script] Demande de conseil[Bash] awk : split qui ne fonctionne pas :(
Script FTP synchronisation de répertoire distantScript shell ftp
[Postfix] Gestion d'un domaine sur 2 serveursComment mettre la reponse à un script dans la commande ?
Plus de sujets relatifs à : Script Bash : Gestion des erreurs


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR