tratamento de erros em sentenças de casos [Shell Script]

1

Eu tenho essa configuração e preciso quando um erro ocorreu no script principal, para levar esse erro para um arquivo temporário $ INFO_PLUGIN, o problema é que o script continua funcionando depois de case e envia também uma mensagem OK para $ INFO_PLUGIN arquivo temporário, substituindo a mensagem de erro existente.

Eu gostaria de receber um erro, levar esse erro para o arquivo $ INFO_PLUGIN e impedir a execução de reportmail OK; de alguma forma, mas não sei como e preciso de ajuda.

Thnaks antecipadamente pelo seu tempo e cooperação.

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;

script reportMail.sh:

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

Editar:

############################### 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;
}

se eu correr:

[user@server dir]$ ./Test.sh 1

ou:

[user@server dir]$ ./Test.sh 2

este é o resultado, incluído no arquivo ~ / results.txt

[user@server dir]$ cat results.txt
Everything = OK

O resultado é o mesmo em todos os casos, porque error 0; no primeiro script, portanto, minha pergunta é como posso determinar se ocorreu um erro em algum valor no primeiro case , por exemplo: erro ocorreu a execução de% código%. Como posso fazer para pular Test.sh b e evitar executá-lo se houver um erro antes, senão se não houver erro em error 0; . case deve ser executado para dizer error 0;

Espero que você entenda e muito obrigado pelo seu tempo.

    
por Adryoid 03.02.2014 / 11:51

1 resposta

0

Problema resolvido adicionando isto:

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

isto envia um 1 para um arquivo de erro e ...

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

este teste se houve um erro durante a execução dos scripts, se sim, basta enviar o relatório no ordr para ver o log em um servidor web, caso contrário, se o everithing estiver OK envie o log para um servidor web e envie a mensagem OK para o sistema de monitoramento Nagios.

Obrigado! & até a próxima!

    
por 04.02.2014 / 16:37