
Как можно убрать время из возвращаемого пинга? Например:
64 bytes from 10.3.0.1: icmp_seq=0 ttl=63 time=2.610 ms
Я хочу получить значение после time=
и передать его в тест, например:
if time>=50.0; then do_something; fi
решение1
Итак, если вы хотите получить только time
значение без ms
метки:
HOST="127.0.0.1"
PING_MS=`ping -c1 "$HOST" | /usr/bin/awk 'BEGIN { FS="=" } /time=/{gsub(/ ms/, ""); print $NF; exit}'`
Это дает мне:
0.058
Теперь, если бы мы хотели проверить time>=50.0
, , мы могли бы использовать awk
для этого тоже, поскольку sh
сам POSIX не может сравнивать десятичные числа:
if echo $PING_MS | awk '{exit $1>=50.0?0:1}'; then
echo "Ping time is >= 50.0ms."
fi
Вы можете сократить это до:
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
является разделителем полей и $NF
всегда является последним полем. $NF>=50.0?0:1
завершится с кодом успешного завершения, если последнее поле — >=50.0
; или с кодом завершения ошибки, если нет. /time=/
соответствует только строкам, содержащим time=
. gsub(/ ms/, "");
удаляет " ms"
из строки.