manejo de errores en oraciones de caso [Shell Script]


1

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.


Hola y bienvenidos a SuperUser! Es muy probable que encuentre que es más fácil obtener respuestas a estas preguntas si puede producir un ejemplo de código mínimo que muestre un comportamiento inesperado.
l0b0

En 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.
mpy

Mi pregunta es: si ejecuto el primer script y no ocurrió ningún error, entonces 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.
Adryoid

Respuestas:


0

Problema resuelto agregando esto:

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

esto envía un 1 a un archivo de error y ...

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

esta prueba si hubo un error durante la ejecución de los scripts, en caso afirmativo, simplemente envíe el informe en ordr para ver el registro en un servidor web; de lo contrario, si todo está bien, envíe el registro a un servidor web y envíe el mensaje OK a Nagios. sistema.

¡Gracias! &erio; ¡hasta la proxima vez!

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.