pingの戻り時間を削除する方法は?たとえば、
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
POSIX自体は10進数を比較できないため、これが利用可能かどうかをテストするには、time>=50.0
次の手順を実行します。awk
sh
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"