Comparando os tempos de ping no FreeBSD sh

3

Como posso tirar 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

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

if time>=50.0; then do_something; fi
    
por mrm 13.02.2016 / 02:07

1 resposta

1

Então, se você quiser obter apenas o valor time sem o rótulo ms :

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 quisermos testar se time>=50.0 , poderíamos usar awk também, pois POSIX sh 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ê pode 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:1 sairá com um código de saída bem-sucedido se o último campo for >=50.0 ; ou um código de saída de erro, se não. /time=/ corresponde apenas às linhas que contêm time= . gsub(/ ms/, ""); remove " ms" da string.

    
por 13.02.2016 / 02:42