
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"