J'ai cette configuration et j'ai besoin quand une erreur s'est produite dans le script principal, pour porter cette erreur dans un fichier temporaire $ INFO_PLUGIN, le problème est que le script continue de fonctionner après case
et envoie également un message OK au fichier temporaire $ INFO_PLUGIN, en remplaçant l'erreur existante message.
J'aimerais, lorsqu'une erreur se produit, porter cette erreur dans le fichier temporaire $ INFO_PLUGIN et empêcher son exécution d' reportmail OK;
une manière ou d'une autre, mais je ne sais pas comment et j'ai besoin d'aide.
Merci d'avance pour votre temps et votre coopération.
Script principal:
source ~/share/mailReport.fn
case $2 in
firstcase)
ssh -q -n loguser@server "mkdir -p /home/loguser/logstorage"
if [[ $? -ne 0 ]]; then
echo " ************ "
echo " * Error * "
echo " ************ "
reportmail 12;
exit 12;
fi;
;;
secondcase)
startDate=`date +%s`
if [ -z $3 ]; then
echo -e "\nInsert a parameter...: $0 $1 $2 [Here!]\n"
exit;
fi;
echo -e "\nRunning test with error number...: $3\n"
endDate=`date +%s`
DIFF=$(( $endDate - $startDate ))
echo -e "* Time in sec..: $DIFF\n"
reportmail $3;
;;
esac
echo " ************ "
echo " * Finished * "
echo " ************ "
reportmail OK;
reportMail.sh Script:
case $1 in
12)
mailx -s "Error happened during mkdir" -r $SENDER_ADDRESS $RECIPIENT_ADDRESS
<<EOF
Hello,
Error happened in `uname -n` bla, bla, bla...
EOF
echo -e "CRITICAL - Error creating destination dir" > $INFO_PLUGIN
;;
OK)
echo -e "OK - Time in sec..: $DIFF Total Saved..: `cat $temp` MB" > $INFO_PLUGIN
rm $temp
;;
esac
Modifier:
############################### Little example ###############################
test.sh
#!/bin/sh
source ~/test2.sh
case $1 in
a) error 0; ;;
b) error 1; ;;
c) error 2; ;;
esac;
error 0; # This is what I need to jump in case of error
test2.sh:
#!/bin/sh
function error () {
case $1 in
0) echo "Everything = OK" > ~/results.txt ;;
1) echo "Sth Wrong = error 2" > ~/results.txt ;;
2) echo "Sth Wrong = error 3" > ~/results.txt ;;
esac;
}
si je cours:
[user@server dir]$ ./Test.sh 1
ou:
[user@server dir]$ ./Test.sh 2
c'est le résultat, inclus dans le fichier ~ / results.txt
[user@server dir]$ cat results.txt
Everything = OK
Le résultat est le même dans tous les cas, car error 0;
lors du premier script, ma question est donc la suivante: comment puis-je déterminer si une erreur est survenue sur une valeur en premier case
, par exemple: erreur est en cours d'exécution Test.sh b
. Comment puis-je faire pour sauter error 0;
et empêcher de l'exécuter s'il y a une erreur avant, sinon s'il n'y a pas d'erreur case
. error 0;
devrait être exécuté pour direhey, everything is ok!
J'espère que vous comprenez et merci beaucoup pour votre temps.
test.sh
vous dites: error 0; # This is what I need to jump in case of error
. Alors, votre question est: comment puis-je obtenir une branche par défaut case...esac
? Si c'est le cas, la réponse est d'utiliser *)
comme dernier cas.
error 0;
sera exécuté à la fin du script et envoie un message OK au fichier results.txt. Sinon, si une erreur survient, le message ERROR sera envoyé à results.txt par le script seconf, mais seulement pendant une seconde jusqu'à ce que le premier script soit exécuté une fois de plus error 0;
et remplace le message ERROR dans le fichier results.txt.