simples script nagios falhando

3

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
    
por Magd 29.03.2012 / 22:10

3 respostas

4

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.

    
por 29.03.2012 / 22:18
4

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
    
por 29.03.2012 / 22:35
0

link

Está sendo tratado como uma comparação de string.

Use "-gt" em vez disso:

if [ $result -gt $value ]; then
    
por 29.03.2012 / 22:18