ping:結果のみを表示

ping:結果のみを表示

完全な結果ページではなくpingのミリ秒だけを表示できますか?

私のサーバーがオンラインであることを確認したいので、「OK xyz ms」または「FAIL」を返したいと思います。私は現在これをやっています:

#!/bin/sh
ergebnis=$(ping -qc1 google.com) 
ok=$?
avg=$(echo -e "$ergebnis"  | tail -n1 | awk '{print $4}' | cut -f 2 -d "/")

if [ $ok -eq 0 ]
then
        echo "OK $avg ms"
else
        echo "FAIL"
fi

しかし、これはかなり多くのパイプ操作を使用し、サーバーを監視するためにこのコマンドを頻繁に実行するため、「よりスマートな」方法があるかどうか疑問に思います。また、pingコマンドが失敗した場合、パイプラインが正しく機能しない可能性があるという懸念もあります。

答え1

その他awk多様性:

ping -qc1 google.com 2>&1 | awk -F'/' 'END{ print (/^rtt/? "OK "$5" ms":"FAIL") }'
  • -F'/'- スラッシュを/フィールド区切り記号として扱う

出力例:

OK 47.090 ms

答え2

それ自体はできることはあまりありませんが、pingAWKですべての処理を実行してパイプ、プロセスなどの数を減らすことができます。

ping -qc1 google.com 2>&1 | awk -F/ '/^rtt/ { printf "OK %.2f ms\n", $5; ok = 1 } END { if (!ok) print "FAIL" }'

答え3

正確なエラーメッセージにあまり興味がない場合はどうですか?

ping  google.com | grep -Po "time.*"

答え4

欲しいなら状態(いいえミリ秒など)今行ってもいいですif。これは私のユースケースに適しています。

if ping -q -c 1 192.168.8.8 2>&1 > /dev/null ; then
    echo "Ok"
else
    echo "Fail"
fi

関連情報