Я писал плагин для 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
Вы не можете выразить диапазонов числа легко в 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