Tengo esta configuración y necesito cuando ocurrió un error en el script principal, para llevar este error a un archivo temporal $ INFO_PLUGIN, el problema es que el script continúa funcionando después de case
y envíe también un mensaje OK al archivo temporal $ INFO_PLUGIN, reemplazando el mensaje de error existente.
Me gustaría que cuando se produzca un error, lleve este error al archivo temporal $ INFO_PLUGIN y evite la ejecución reportmail OK;
De alguna manera, pero no sé cómo y necesito ayuda.
Gracias de antemano por su tiempo y cooperación.
Guión 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
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;
}
si corro
[user@server dir]$ ./Test.sh 1
o:
[user@server dir]$ ./Test.sh 2
Este es el resultado, incluido en el archivo ~ / results.txt
[user@server dir]$ cat results.txt
Everything = OK
El resultado es el mismo en todos los casos, porque error 0;
en el primer script, así que mi pregunta es cómo puedo hacer para determinar si ocurrió un error en algún valor en primer case
, por ejemplo: error sucedió en ejecución Test.sh b
. Como puedo hacer para saltar error 0;
y evitar que se ejecute si hay un error antes, de lo contrario si no hay ningún error en case
. error 0;
debe ser ejecutado para decir hey, everything is ok!
Espero que lo entiendas y muchas gracias por tu tiempo.
test.sh
usted declara: error 0; # This is what I need to jump in case of error
. Entonces, es tu pregunta: ¿Cómo obtengo una rama predeterminada en case...esac
? Si es así, la respuesta es usar *)
como el último caso.
error 0;
se ejecutará al final de la secuencia de comandos y enviará un mensaje OK al archivo results.txt. De lo contrario, si se produce un error, la secuencia de comandos seconf enviará un mensaje de ERROR a results.txt, pero solo por un segundo hasta que la primera secuencia de comandos se ejecute una vez más. error 0;
y anular el mensaje ERROR en results.txt.