Vergleichen von Ping-Zeiten in FreeBSD sh

Vergleichen von Ping-Zeiten in FreeBSD sh

Wie kann ich die Zeit aus einer Ping-Rückmeldung extrahieren? Beispiel:

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

Ich möchte den Wert danach erfassen time=und ihn an einen Test wie diesen übergeben:

if time>=50.0; then do_something; fi

Antwort1

timeWenn Sie also nur den Wert ohne das msLabel erhalten möchten :

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

Das gibt mir:

0.058

Wenn wir nun testen möchten, ob time>=50.0, könnten wir awkhierfür ebenfalls verwenden, da POSIX shselbst keine Dezimalzahlen vergleichen kann:

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

Sie können dies folgendermaßen abkürzen:

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

FSist der Feldtrenner und $NFimmer das letzte Feld. $NF>=50.0?0:1wird mit einem Erfolgs-Exitcode beendet, wenn das letzte Feld ist >=50.0, oder mit einem Fehler-Exitcode, wenn nicht. /time=/stimmt nur mit Zeilen überein, die enthalten time=. gsub(/ ms/, "");entfernt " ms"aus der Zeichenfolge.

verwandte Informationen