インターネット接続を確認するスクリプトがあります。私はこれを達成するためにpingを使用します。使用するたびにping google.com -c 4 | grep time
null以外の応答が生成されます。それはまるで
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.com
IP接続と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
また、見ることができますシェルスクリプト:インターネット接続を確認する正しい方法は何ですか?