Сравнение времени пинга в FreeBSD sh

Сравнение времени пинга в FreeBSD sh

Как можно убрать время из возвращаемого пинга? Например:

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"из строки.

Связанный контент