0

OSX でインターネットに接続しているかどうかを判断するための小さなスクリプトを作成しています。ただの練習のほうが多いと思います。

ターミナルで「ifconfig | grep -cs 'status: active'」は、アクティブな接続が少なくとも 1 つある場合、1 を返します。

私が持っているスクリプトはこれです

    #!/bin/bash

detect(){
ONLINE=ifconfig | grep -cs 'status: active'
}

if [[ detect = 1 ]]
then
        echo "Online"
else
        echo "Offline"
fi

ただし、変数 ONLINE は常に 0 を返します。私が理解していることから、これはスクリプト内でパイプを使用することに関係しています。コマンドの実行時にサブパイプが使用され、サブパイプが閉じると ONLINE が 0 でスタックします。

問題が発生していると思いますが、これを回避する方法がわかりません。whileループでこの問題を抱えているスクリプトの回避策をたくさん見ましたが、ifconfigからの出力をgrepに渡す必要がある場所は何もありませんでした。

4

4 に答える 4

2

現在のスクリプトに関するいくつかの問題:

  1. 変数ONLINEを設定しますが、テストしdetectます。
  2. ifconfig | grep -cs 'status: active'コマンドの結果を実際に変数に割り当てるわけではありませんONLINE
  3. 同等性をテストする=代わりに使用します==

以下は、意図したものに近いようです。

#!/bin/bash
ONLINE=$(ifconfig | grep -cs 'status: active')
if [[ $ONLINE == 1 ]]
then
  echo "online"
else
  echo "offline"
fi
于 2013-09-04T04:35:30.937 に答える
1

これを使って:

ONLINE=$(ifconfig | grep -cs 'status: active')


「$」がない場合、bash が返すものは、コマンドが成功したかどうかの結果であり、成功した場合は常にゼロです。

于 2013-09-04T04:04:40.710 に答える
0

または、このようにシンプルに保つこともできます...

ifconfig | grep 'status: active' > /dev/null 2>&1
if [ $? == 0 ]
then
   echo "online"
else
   echo "offline"
fi
于 2013-09-04T04:05:59.607 に答える