Условия и диапазоны в операторах выбора в ударе

Я писал плагин для Nagios для проверки количества пакетов защиты и делал оператор выбора как тот здесь.

но все это закончило тем, что превратилось в паноптикум. Все, что я в основном хотел сделать, говорило, существует ли между шоу пакетов 1-20 это предупреждение, если шоу с 21 бесконечностью, очень важное и так далее, но я не мог бы просто сделать [ -gt 1 ] или даже [20-10000]

При применении этих диапазонов сценарий работал бы отчасти нерегулярно и предупредил бы, когда он был предназначен, чтобы быть очень важным и т.д. Я думаю, что заключил, что диапазоны не действительно возможны здесь, я просто задаюсь вопросом, почему это работало на пример, данный выше, но не на меня. Кроме того, это должно любым возможным путем включать условия в случае?

В конце мне удалось сделать полностью рабочий сценарий, но я должен был создать, если условия и передают их для преобразования регистра. Просто удивление, если был более легкий способ сделать это, не имея необходимость делать это.

Ниже более или менее, что я пытался сделать. Последняя часть была просто я являющийся отчаянными загрузками попытки различных диапазонов, чтобы видеть, работала ли она.

case $SECURITY_PACKAGES in

   0)

   echo "OK - not bad: There are a total of $TOTAL_PACKAGES packages to upgrade in this server, but none of them are security updates!"

   exit 0

   ;;

   [1-20]*)

  echo "WARNING - $TOTAL_PACKAGES packages required to upgrade in this server, of which $SECURITY_PACKAGES are security updates"

 exit 1
  ;;

   [21-99]|[100-999]|[1000-9999]*)

   echo "CRITICAL -  $SECURITY_PACKAGES out of $TOTAL_PACKAGES are security     updates! Consider upgrading soon!"

 exit 2
;;

*) echo "UNKNOWN - I am not sure what's happening now, check later or check server: $TOTAL_PACKAGES to upgrade, $SECURITY_PACKAGES are security updates"

exit 3
;;

esac
1
задан 15 October 2015 в 01:02

1 ответ

Вы не можете выразить диапазонов числа легко в case выражения - шаблон [1000-9999], например, не означает числа 1000 кому: 9999, но символы 1, 0, 0, диапазон 0-9, символы 9, 9, 9 - по существу все цифры. [1-85] не означает числа 1 кому: 85, но цифры от 1 кому: 8, и 5... которые являются просто цифрами от 1 кому: 8. Так [1-20]* средства что-либо, что начинается 1, 2, или 0 - настолько ровный 20000000 будет соответствовать этому. Использовать if/then/elif/else/fi вместо этого:

if (( $SECURITY_PACKAGES == 0 ))
then
    echo "OK - not bad: There are a total of $TOTAL_PACKAGES packages to upgrade in this server, but none of them are security updates!"
    exit 0
elif (( $SECURITY_PACKAGES <= 20 ))
then
    echo "WARNING - $TOTAL_PACKAGES packages required to upgrade in this server, of which $SECURITY_PACKAGES are security updates"
    exit 1
elif (( $SECURITY_PACKAGES <= 9999 ))
then
    echo "CRITICAL -  $SECURITY_PACKAGES out of $TOTAL_PACKAGES are security     updates! Consider upgrading soon!"
    exit 2
else
    echo "UNKNOWN - I am not sure what's happening now, check later or check server: $TOTAL_PACKAGES to upgrade, $SECURITY_PACKAGES are security updates"
    exit 3
fi
2
ответ дан 7 December 2019 в 13:52

Другие вопросы по тегам:

Похожие вопросы: