Como usar o regex para números literais

1

Estou escrevendo um script para enrolar uma página da web e grep / sed / sort / tail em um número e, em seguida, usar os códigos de saída do nagios para monitoramento. Meu script bash é o seguinte:

queue= curl -s 'site | grep -ohE 'READY":[0-9]+' |\
    sed 's/READY"://' | sort -n | tail -1

if [[ $queue =~ [0-1] ]]; then
    echo "OK - $queue current jobs."
    exit 0
fi

if [[ $queue =~ [2-3] ]]; then
    echo "WARNING - $queue current jobs in queue."
    exit 1
fi

if [[ $queue =~ [4-100] ]]; then
    echo "CRITICAL - $queue current jobs in queue."
    exit 2
fi

O problema que estou enfrentando é que ele está retornando qualquer número que comece com 3, por exemplo, como aviso. 3, 30, 300 etc, em vez de apenas 3.

WARNING - 39 current jobs in queue.

O aviso deve ser apenas de 2 a 3, onde o crítico deve ser de 4 a 100 trabalhos e de 0 a 0.

Como eu configuraria o intervalo de números para sair apenas no dígito único e não em vários dígitos?

    
por David 28.12.2016 / 21:02

1 resposta

3

Não use expressões regulares. Estes são números e devem ser tratados como tal.

if [ $queue -lt 2 ]; then 
    echo "OK - $queue current jobs."
    exit 0
fi

if [ $queue -lt 4 ]; then 
    echo "Warning - $queue current jobs."
    exit 1
fi

if [ $queue -ge  4 ]; then
    echo "CRITICAL"
    exit 2
fi

-lt = menos então; -ge = maior igual, veja mais aqui

    
por 28.12.2016 / 23:07

Tags