Назад | Перейти на главную страницу

простой скрипт nagios не работает

Что не так со следующим if-then-else? Я никогда не смогу ударить по другому.

if [ $result > $value ]; then
   echo HEALTH: OK.  Result is $result  Value is $value
   exit 0
 else
   echo HEALTH: CRITICAL.  Result is $result which is over $value
   exit 2
 fi


# ./check_cw_auto <AWS variables> 5.0
HEALTH: OK. Result is 275593.8 Value is 5.0

# ./check_cw_auto <AWS variables> 10000000.0
HEALTH: OK. Result is 275593.8 Value is 10000000.0

Я пытаюсь создать сценарий nagios bash. Я попробовал -gt вместо>, но это выдает ошибку. Пример:

./check_cw_auto <AWS variables> 5.0 
./check_cw_auto: line 30: [: 256497.2: integer expression expected
HEALTH: CRITICAL. Result is 256497.2 which is over 5.0

Поскольку у вас есть число с плавающей запятой как часть сравнения, вы можете использовать До нашей эры для сравнения bc возвращает 1, если сравнение верно

if [ $(echo "$result > $value" | bc -q ) -eq 1 ]; then
   echo HEALTH: OK.  Result is $result  Value is $value
   exit 0
 else
   echo HEALTH: CRITICAL.  Result is $result which is over $value
   exit 2
 fi

В [], сравниваются две строки лексикографически, а не численно. Вы хотите использовать -gt или -lt.

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

http://mywiki.wooledge.org/BashPitfalls#A.5B.5B_.24foo_.3E_7_.5D.5D

Это рассматривается как сравнение строк.

Вместо этого используйте "-gt":

if [ $result -gt $value ]; then