Comparando tempos de ping no FreeBSD sh

Comparando tempos de ping no FreeBSD sh

Como posso diminuir o tempo de um retorno de ping? Por exemplo:

64 bytes from 10.3.0.1: icmp_seq=0 ttl=63 time=2.610 ms

Quero pegar o valor depois time=e passá-lo para um teste como:

if time>=50.0; then do_something; fi

Responder1

Então, se você quiser obter apenas o timevalor sem o msrótulo:

HOST="127.0.0.1"
PING_MS=`ping -c1 "$HOST" | /usr/bin/awk 'BEGIN { FS="=" } /time=/{gsub(/ ms/, ""); print $NF; exit}'`

Isso me dá:

0.058

Agora, se quiséssemos testar if time>=50.0, poderíamos usar awkpara isso também, já que sho próprio POSIX não pode comparar números decimais:

if echo $PING_MS | awk '{exit $1>=50.0?0:1}'; then
    echo "Ping time is >= 50.0ms."
fi

Você poderia encurtar isso para:

if ping -c1 "$HOST" | /usr/bin/awk 'BEGIN { FS="=" } /time=/{gsub(/ ms/, ""); exit $NF>=50.0?0:1}'; then
    echo "Ping time is >= 50.0ms."
fi

FSé o Separador de Campos e $NFé sempre o último campo. $NF>=50.0?0:1sairá com um código de saída de sucesso se o último campo for >=50.0; ou um código de saída de erro, caso contrário. /time=/corresponde apenas às linhas que contêm time=. gsub(/ ms/, "");remove " ms"da string.

informação relacionada