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.