2017-07-15 22 views
0

私はちょっとしたスクリプトを書いて、特定のIPアドレスが私が持っていたアイデアへのリンクとしてオンラインであるかどうかを確認しようとしています。もし誰かが私を助けてくれるのだろうかと思っているこれは、IPアドレスが2回pingを実行し、結果がBashでコマンドを出力する

--- 127.0.0.1 ping statistics --- 
2 packets transmitted, 0 received, 100% packet loss, time 1007ms 

を言うのであれば、私はecho "OFFLINE"にそれを好きで、次のIPアドレスをpingに行く、との結果がある場合

--- 127.0.0.1 ping statistics --- 
2 packets transmitted, 2 received, 0% packet loss, time 1001ms 
を言う持っていることでした

echo "ONLINE"に連絡し、次のIPアドレスに進みます。

このように、pingの出力を取り出してエコーされる内容を判断する方法はありますか?

答えて

2

pingの終了ステータスを使用できます。ターゲットにpingできる場合は0(成功)、そうでない場合は1を返します。ですから、

if ping -c 2 -q host1 &>/dev/null; then 
    echo "ONLINE" 
else 
    echo "OFFLINE" 
fi 

を行うことが、可能性があり、あなたが

$(...)内部コマンドの出力を変数に保存されます
ping_output="$(ping -c2 host1)" 

のようなコマンド置換を使用することができますコマンドの出力をキャプチャしたい場合は、

:ここ ping_output

たり、文字列があなたがパイプができた出力に現れたかどうかを確認するためにgrepを使用したい場合は命名

if ping -c 2 host1 | grep -q " 0% packet loss"; then 
    echo ONLINE 
else 
    echo OFFLINE 
fi 

10は、我々はあなたに感謝し、それはこれが私の問題を解決し

+0

一致する行を表示しませんgrepするために-qを使用しています。 – John

関連する問題