Что не так со следующим 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