Comparando tiempos de ping en FreeBSD sh

Comparando tiempos de ping en FreeBSD sh

¿Cómo puedo quitar el tiempo de un retorno de ping? Por ejemplo:

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

Quiero tomar el valor después time=y pasarlo a una prueba como:

if time>=50.0; then do_something; fi

Respuesta1

Entonces, si quisieras obtener solo el timevalor sin la msetiqueta:

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

Esto me da:

0.058

Ahora, si quisiéramos probar if time>=50.0, también podríamos usar awkpara esto, ya que POSIX shno puede comparar números decimales:

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

Podrías acortarlo a:

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

FSes el separador de campos y $NFsiempre es el último campo. $NF>=50.0?0:1saldrá con un código de salida exitoso si el último campo es >=50.0; o un código de salida de error si no. /time=/coincide sólo con líneas que contienen time=. gsub(/ ms/, "");se retira " ms"de la cuerda.

información relacionada