
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
time
Wenn Sie also nur den Wert ohne das ms
Label 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 awk
hierfür ebenfalls verwenden, da POSIX sh
selbst 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
FS
ist der Feldtrenner und $NF
immer das letzte Feld. $NF>=50.0?0:1
wird 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.