Welcome, Guest. Please Login or Register
FUG-FR logo
 
  HomeHelpSearchLoginRegister  
 
Traitement des erreur ; script sh (Read 4200 times)
Marck
God Member
*****
Offline


I Love New YaBB

Posts: 1113
Traitement des erreur ; script sh
25. Oct 2006 at 18:58
 
Salut

Je n'ai jamais rien lu sur le traitement des erreurs dans les script sh mais, dans un tel script, peut-on traiter les éventuelles erreurs des commandes passées autrement qu'en surveillant "$?" après leur exécution ?

Par exemple ici la fonction testerror arrête le script si fetch rencontre un problème:

Code:
...
testerror ()
{
if [ $STOP != 0 ] ; then
	echo ""
	echo "==== ERREUR ===="
	echo "Une erreur de telechargement est survenue."
	echo "Veuillez verifier votre connexion et relancer ce script."
	exit 1
fi
}
...
if [ ! -f base.$i ] ; then
	echo "Telechargement du fichier base.$i"
	fetch $FTP/base/base.$i
	STOP=`echo $?`
	testerror
fi
... 



Bref à part surveiller "$?" je ne vois pas ce que je pourrais faire ?

Merci, Marc
Back to top
 
WWW WWW  
IP Logged
 
idroxid
Full Member
***
Offline


Meuh!

Posts: 120
Re: Traitement des erreur ; script sh
Reply #1 - 25. Oct 2006 at 20:40
 
tu peux utiliser le code de retour de fetch.
Back to top
 
 
IP Logged
 
Marck
God Member
*****
Offline


I Love New YaBB

Posts: 1113
Re: Traitement des erreur ; script sh
Reply #2 - 25. Oct 2006 at 21:18
 
Salut Idroxid

... mais le code de retour de fetch (ou d'une autre commande) n'est-ce pas justement le contenu de "?" soit "$?"... ???

Par exemple: http://lea-linux.org/cached/index/Dev-shell_script.html#
Quote:
"Il faut savoir que tous les programmes renvoient une valeur. Cette valeur est stockée dans la variable ? dont la valeur est, rappelons le : "$?"."


Ou alors tu parles d'autre chose que je ne connais pas, mais alors si tu pouvais être un peu plus précis Smiley

Merci, Marc
Back to top
 
WWW WWW  
IP Logged
 
idroxid
Full Member
***
Offline


Meuh!

Posts: 120
Re: Traitement des erreur ; script sh
Reply #3 - 25. Oct 2006 at 21:48
 
Je suis nul à ch... en bash, mais tu te compliques la tâche.

if [ ! -f base.$i ] ; then
     echo "Telechargement du fichier base.$i"
     
      if [ ! fetch $FTP/base/base.$i]; then
        echo ""
        echo "==== ERREUR ===="
        echo "Une erreur de telechargement est survenue."
        echo "Veuillez verifier votre connexion et relancer ce script."
        exit 1
      fi
fi
C'est du pseudo code, je ne garantis pas du tout la syntaxe: if [ ! fetch $FTP/base/base.$i]; then ... mais  c'est là que tu testes le retour de fetch.
Back to top
 
 
IP Logged
 
Marck
God Member
*****
Offline


I Love New YaBB

Posts: 1113
Re: Traitement des erreur ; script sh
Reply #4 - 25. Oct 2006 at 22:25
 
OK c'est la même chose en plus condensé et donc plus élégant mais moins lisible pour moi.

En fait si je récupère $? dans une autre variable c'est pour parfois faire des tests plus complets et être sûr que le $? que je teste est toujours le bon et non celui d'une autre commande éventuellement passée entre temps (disons que plutôt que de m'en inquiéter comme cela je suis tranquille)... Par exemple dans un autre script de la série:

Code:
...
if [ ! -d livecd/var/db/pkg/$i* ] ; then
	echo "Installation du paquet $i."
	pkg_add -C livecd/ $FTP/$i.tbz
	PBPKGADD=`echo $?`
	if [ $PBPKGADD = 1 ] ; then
		AGAIN="1"
		echo "==== ERREUR ===="
		echo "pkg_add erreur n°1: Le paquet $i n'a sans doute pas pu etre installe."
		echo ""
	elif [ $PBPKGADD = 2 ] ; then
		echo "==== AVERTISSEMENT ===="
		echo "pkg_add erreur n°2: Pseudo inscription de $i en var/db/pkg."
		echo ""
		mkdir livecd/var/db/pkg/$i
	fi
else
	echo "Le paquet $i est deja installe."
fi
 



Voilà voilà mais il est vrai que dans l'exemple précédent la variable STOP et la fonction testerror sont un peu "inutiles"... merci pour tes conseils.

Marc
Back to top
 
WWW WWW  
IP Logged
 
fgudin
Global Moderator
*****
Offline


PouetPouetBSD roul3z

Posts: 1552
Thonon (74)
Gender: male
Re: Traitement des erreur ; script sh
Reply #5 - 26. Oct 2006 at 10:12
 
Si tu veux faire une fonction qui attrappe un peu toutes les erreurs, histoire de sortir proprement de ton script en cas de problème, tu peux aussi utiliser une construction comme:
Code:
catastrof(){
echo "Y'a gros problème"
blablabla...
exit 1
}
(...)
ma_commande || catastrophe
(...)
 


soit: si le code de sortie de ma_commande n'est pas nul, alors catastrophe.
Back to top
 
 
IP Logged
 
Marck
God Member
*****
Offline


I Love New YaBB

Posts: 1113
Re: Traitement des erreur ; script sh
Reply #6 - 26. Oct 2006 at 12:09
 
OK merci Francis.

C'est vrai que je n'utilise pas beaucoup les "||" et "&&" comme une façon simple de savoir si tout c'est bien passé ou non et donc si l'on continue ou non. C'est pourtant simple et plus élégant que d'utiliser une variable supplémentatire style "STOP" du premier script.

Je verrai cela  dès que je reprendrai ces scripts.

Marc
Back to top
 
WWW WWW  
IP Logged