eth0
が構成されているかどうかをスクリプトで確認する必要があります。その場合、スクリプトは何もしません。それ以外の場合はwlan0
で始まります。 (eth0
とwlan0
の両方が同時に起動することは望ましくありません)。
eth0
がすでに稼働しているかどうかを確認する最も簡単な方法は何ですか?
私はDebian Wheezyを使用しています
eth0
のケーブルが接続されていることだけでなく、インターフェースが構成されていること(つまり、静的IPが設定されているか、DHCP IPを受信していること)を確認したいと思います。ケーブルは差し込まれているがeth0
が正しく構成されていない場合、wlan0
を起動します
あなたはそれを多くの方法で行うことができます。ここに例を示します:
$ cat /sys/class/net/eth0/operstate
up
ip a show ethX up
何も表示されない場合は、インターフェースがダウンしています
ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing
したがって、ここではgrep
ユビキタスip
ツールのstdout
対象のインターフェイスとフレーズ "state UP"の両方を含む行の場合(@Lekensteynのおかげで、UP
だけではなく、もう少し具体性の必要性を指摘してくれました。)a
の省略形として引数address
を使用します。システム内のすべての構成済みネットワークカードのリストを取得するのに十分です。
ip
を使用する利点の1つは、どこでも使用できることです。これは、Android phone'sたとえば、ネットワークデバイス。
:colons
は部分一致を回避するために使用されます-このようにして、eth0
の一致を保証します他の方法では可能なsomeothereth0
またはeth007
。とは対照的
@RaphaelAhrensが正しいことを理解し、解決策を説明してくれてありがとう。
現在の要件を処理するには、次のことができます。
ip a | sed -rn '/: '"$if"':.*state UP/{N;N;s/.*inet (\S*).*/\1/p}'
上記は、ターゲット$if
がUP、接続されており、1つあります。 ipv6の場合、ソリューションは同じように単純で、わずかな変更のみです。
sed
が気に入らない場合は、別の|pipe ... grep
を使用して同様の結果を達成し、 a-A
コンテキストオプションを最初のgrep
に-が好きsed
。
他の方法は機能しませんが、これは機能します(少なくともUbuntuでは):
while true; do
ip route | grep "linkdown"
if [ $? -eq 0 ]; then
sleep 1 # network not yet up
else
break # network up
fi
done