обработка ошибок в тематических предложениях [Shell Script]
445
Adryoid
У меня есть эта настройка, и мне нужно, когда в основном скрипте произошла ошибка, чтобы перенести эту ошибку во временный файл $ INFO_PLUGIN, проблема в том, что скрипт продолжает работать после caseи отправить также сообщение OK во временный файл $ INFO_PLUGIN, переопределяя существующую ошибку сообщение.
Я хотел бы, чтобы при возникновении ошибки, перенесите эту ошибку во временный файл $ INFO_PLUGIN и reportmail OK;каким-либо образом предотвратить выполнение, но я не знаю, как, и мне нужна помощь.
Заранее спасибо за ваше время и сотрудничество.
Основной сценарий:
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 Сценарий:
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
Редактировать:
############################### 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
[user@server dir]$ cat results.txt Everything = OK
Результат одинаков во всех случаях, потому что error 0;в первом сценарии мой вопрос заключается в том, как определить, произошла ли ошибка с каким-либо значением при первом case, например: произошла ошибка при выполнении Test.sh b. Как я могу сделать, чтобы перейти error 0;и предотвратить его выполнение, если есть ошибка раньше, иначе, если нет ошибки на case. error 0;должно быть выполнено, чтобы сказатьhey, everything is ok!
Я надеюсь, что вы понимаете и большое спасибо за ваше время.
Привет и добро пожаловать в SuperUser! Скорее всего, вы обнаружите, что легче получить ответы на такие вопросы, если вы сможете создать минимальный пример кода, демонстрирующий неожиданное поведение.
l0b0 10 лет назад
0
В `test.sh` вы указываете:` error 0; # Это то, что мне нужно прыгать в случае ошибки`. Итак, ваш вопрос: как мне получить ветку по умолчанию в `case ... esac`? Если это так, ответом будет использование `*)` в качестве последнего случая.
mpy 10 лет назад
0
Мой вопрос: если я запускаю первый скрипт и ошибки не происходит, то `error 0;` будет выполнена в конце скрипта и отправит сообщение OK в файл results.txt. В противном случае, если произошла ошибка, сообщение ERROR будет отправлено в results.txt сценарием secondf, но только на секунду, пока первый сценарий не будет запущен еще раз `error 0;` и переопределит сообщение ERROR в файле results.txt.
Adryoid 10 лет назад
0
if [ `cat $err` -eq 1 ]; then reportmail 201$BYTES; rm $err else reportmail 201$BYTES; reportmail OK; rm $err fi;
this test if there was an error during execution of scripts, if yes, just send the report in ordr to see the log on a web server, otherwise, if everithing is OK send the log to a web server and send OK message to Nagios monitoring system.