Я должен проверить коды возврата двух нижних индексов, запущенных из сценария обертки, с помощью оболочки Bash.
Если любой нижний индекс перестанет работать, то они произведут отрицательное целое число как код возврата. Если сценарий будет иметь незначительные ошибки, то он произведет положительное целое число. Я выполнение совершенно успешно код возврата, буду 0.
Я хочу создать набор переменная, чтобы иметь содержание другой переменной на основе результата. В настоящее время я использую большое ужасное if
elif
создайте, но такое чувство, что я должен использовать a case
оператор.
Вот мой текущий код:
if [[ "$sumcreate_retval" -lt "0" ]] && [[ "$movesum_retval" -lt "0" ]]
then
script_retcode="$both_warn_err"
elif [[ "$sumcreate_retval" -gt "0" ]] && [[ "$movesum_retval" -gt "0" ]]
then
script_retcode="$both_crit_err"
elif [[ "$sumcreate_retval" -gt "0" ]] && [[ "$movesum_retval" -lt "0" ]]
then
script_retcode="$createwarn_movecrit_err"
elif [[ "$sumcreate_retval" -gt "0" ]] && [[ "$movesum_retval" -eq "0" ]]
then
script_retcode="$createwarn_err"
elif [[ "$sumcreate_retval" -lt "0" ]] && [[ "$movesum_retval" -gt "0" ]]
then
script_retcode="$createcrit_movewarn_err"
elif [[ "$sumcreate_retval" -lt "0" ]] && [[ "$movesum_retval" -eq "0" ]]
then
script_retcode="$createcrit_err"
elif [[ "$sumcreate_retval" -eq "0" ]] && [[ "$movesum_retval" -gt "0" ]]
then
script_retcode="$movewarn_err"
elif [[ "$sumcreate_retval" -eq "0" ]] && [[ "$movesum_retval" -lt "0" ]]
then
script_retcode="$movecrit_err"
else
script_retcode="$success_return"
fi
Как я должен реструктурировать это?
Примечание: Если этот вопрос лучше подходит для другого сайта SE, сообщенного мне.
Что-то вроде этого должно добиться цели. Я думаю, что это выглядит довольно хорошим этот путь:
case $((
sumcreate_retval < 0 && movesum_retval < 0 ? 1 :
sumcreate_retval > 0 && movesum_retval > 0 ? 2 :
sumcreate_retval > 0 && movesum_retval < 0 ? 3 :
sumcreate_retval > 0 && movesum_retval == 0 ? 4 :
sumcreate_retval < 0 && movesum_retval > 0 ? 5 :
sumcreate_retval < 0 && movesum_retval == 0 ? 6 :
sumcreate_retval == 0 && movesum_retval > 0 ? 7 :
sumcreate_retval == 0 && movesum_retval < 0 ? 8 :
0
)) in
(1) script_retcode="$both_warn_err";;
(2) script_retcode="$both_crit_err";;
(3) script_retcode="$createwarn_movecrit_err";;
(4) script_retcode="$createwarn_err";;
(5) script_retcode="$createcrit_movewarn_err";;
(6) script_retcode="$createcrit_err";;
(7) script_retcode="$movewarn_err";;
(8) script_retcode="$movecrit_err";;
(0) script_retcode="success_return";;
esac
Это похоже на ответ @imjoris, но я разбил математику. Это находится в троичном, где 0 0, 1 положительно, и 2 отрицательно по умолчанию. Я перестроил Ваш список для создания этого более ясным - надеются, что это не сбивает Вас с толку :-)
case $((
sumcreate_retval == 0 ? 0 :
sumcreate_retval > 0 ? 1 :
2
))$((
movesum_retval == 0 ? 0 :
movesum_retval > 0 ? 1 :
2
)) in
00) script_retcode="$success_return" ;;
01) script_retcode="$movewarn_err" ;;
02) script_retcode="$movecrit_err" ;;
10) script_retcode="$createwarn_err" ;;
11) script_retcode="$both_crit_err" ;;
12) script_retcode="$createwarn_movecrit_err" ;;
20) script_retcode="$createcrit_err" ;;
21) script_retcode="$createcrit_movewarn_err" ;;
22) script_retcode="$both_warn_err" ;;
esac
BTW, StackOverflow является, вероятно, лучшим сайтом для сложных вопросов о сценариях как они.