シェルスクリプト:何もないものと比較しますか?

シェルスクリプト:何もないものと比較しますか?

インターネット接続を確認するスクリプトがあります。私はこれを達成するためにpingを使用します。使用するたびにping google.com -c 4 | grep timenull以外の応答が生成されます。それはまるで 64 bytes from hkg03s11-in-f4.1e100.net (173.194.127.68): icmp_req=2 ttl=52 time=90.6 ms。ただし、接続が失われると、そのtimeセクションは表示されず、同じコマンドを実行すると空白としてマークされます。どのように使用しますかif?を使用する必要" "があるか混乱します""

どちらを使うべきですか?

if [ 'ping google.com -c 4 | grep time' != " " ]; then

または

if [ 'ping google.com -c 4 | grep time' != "" ]; then

間のスペースに注意してください""

ベストアンサー1

[ … != " " ]左を単一のスペースを含む文字列と比較します。[ … != "" ]左側を空の文字列と比較します。シェルプログラミングにはいくつかの欠点と問題がありますが、この特別なケースは非常に簡単です。

'ping google.com -c 4 | grep time'32文字の文字列です。おそらくコマンドの出力を使用しようとしています。コマンドの置き換え。 (使用済みの前の引用符の代わりに)バックティックを使用するか、ドル角かっこを使用できます。これは、いくつかの複雑な状況ではより読みやすく、エラーの可能性が低い。どちらにしても、内容全体を二重引用符で囲む必要があります。それ以外の場合、コマンドの置換結果は次のようになります。馬で割れて、さらに汚れ

if [ "$(ping google.com -c 4 | grep time)" != "" ]; then …

これらすべては、接続性をテストするためのやや迂回的で脆弱な方法です。代わりに返品ステータスを使用してくださいping。単一のパケットで十分である可能性があるため、ネットワークに障害が発生した場合に備えて、非常に短い時間制限を指定する必要があります。 Pingはgoogle.comIP接続とDNSが正しく機能しているかどうかをテストします。 pingを使用してIPv4接続が機能しているかどうかをテストできます8.8.8.8(8.8.8.8はGoogleが実行しているサーバーです)。

if ping -q -c 1 -W 1 8.8.8.8 >/dev/null; then
  echo "The network is up"
else
  echo "The network is down"
fi

また、見ることができますシェルスクリプト:インターネット接続を確認する正しい方法は何ですか?

おすすめ記事