gestion des erreurs dans les phrases case [Shell Script]

1

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 caseet 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.

Adryoïde
la source
Bonjour et bienvenue sur SuperUser! Vous constaterez très probablement qu'il est plus facile d'obtenir des réponses à ces questions si vous pouvez générer un exemple de code minimal présentant le comportement inattendu.
l0b0
En test.shvous 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.
Mpy
Ma question est la suivante: si j’exécute le premier script et qu’aucune erreur ne s’est produite, il 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.
Adryoid

Réponses:

0

Problème résolu en ajoutant ceci:

echo -e "CRITICAL - Error deleting files - Performance" > $INFO_PLUGIN && echo "1" > $err

cette envoyer un 1à un fichier d'erreur et ...

if [ `cat $err` -eq 1 ]; then
    reportmail 201$BYTES;
    rm $err
else
    reportmail 201$BYTES;
    reportmail OK;
    rm $err
fi;

ce test si une erreur s'est produite lors de l'exécution des scripts, si oui, envoyez simplement le rapport dans l'ordre pour afficher le journal sur un serveur Web, sinon, si tout est en ordre, envoyez le journal à un serveur Web et envoyez un message OK à la surveillance Nagios système.

Merci! & jusqu'à la prochaine fois!

Adryoïde
la source