Em []
, duas sequências são comparadas lexicograficamente , não numericamente. Você deseja usar -gt
ou -lt
.
Editar : Em resposta à sua atualização, bash
não possui lógica de ponto flutuante. Você precisa usar números inteiros.
O que há de errado com o seguinte se-então-else? Eu nunca consigo acertar o outro.
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
Estou tentando criar um script nagios bash. Eu tentei -gt em vez de & gt ;, mas isso deu um erro. Exemplo:
./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
Em []
, duas sequências são comparadas lexicograficamente , não numericamente. Você deseja usar -gt
ou -lt
.
Editar : Em resposta à sua atualização, bash
não possui lógica de ponto flutuante. Você precisa usar números inteiros.
Como você tem um número de ponto flutuante como parte da comparação, você pode usar bc para fazer a comparação, bc retorna 1 se a comparação for verdadeira
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
Está sendo tratado como uma comparação de string.
Use "-gt" em vez disso:
if [ $result -gt $value ]; then