スクリプトが構成されていることを確認する必要がありますeth0
。その場合、スクリプトは何もしません。それ以外の場合は起動しますwlan0
。 (2人がeth0
同時に起きたくありませんwlan0
。)
開始されたことを確認するeth0
最も簡単な方法は何ですか?
私はDebian Wheezyを使用しています
言う:
ケーブルがeth0
接続されていることを確認したいだけでなく、インターフェイスが設定されているか(たとえば、固定IP設定があるか、DHCP IPを受信したか)を確認したいと思います。ケーブルが接続されているがeth0
設定が正しくない場合は、始めたいと思います。wlan0
答え1
さまざまな方法でこれを実行できます。例は次のとおりです。
$ cat /sys/class/net/eth0/operstate
up
答え2
ip a show ethX up
何も表示されない場合、インターフェイスは閉じられています
答え3
ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing
だからここにありますgrep
すべての方法ですip
ツールstdout
興味のあるインターフェースとフレーズを含む行の場合「状態アップ」(単純な内容だけでなく、より具体的な内容の必要性を指摘した@Lekensteynに感謝します。UP
)。私達はパラメータを使用しますa
略語でaddress
これは、システムに設定されているすべてのネットワークカードのリストを取得するのに十分です。
使用すると大きな利点の一つip
おそらく、この機能はどこでも利用できるはずです。たとえば、これは私が通常Android携帯電話ネットワークデバイスを設定する方法です。
これ:colons
部分一致を防ぐために使用されます。この方法で一致を保証します。eth0
他の可能な状況とは対照的にsomeothereth0
またはeth007
。
正確さを追求し、ソリューションを説明してくれた@RaphaelAhrensに感謝します。
編集する:
現在の要件を満たすには、次の手順を実行できます。
ip a | sed -rn '/: '"$if"':.*state UP/{N;N;s/.*inet (\S*).*/\1/p}'
上記は、宛先が次の場合にのみCIDR IPアドレスを印刷します。$if
はい戻る,挿入されて1つあります。 ipv6の場合、ソリューションも同様に単純で、わずかな修正しか必要ありません。
気に入らないとsed
他にも同様の結果が得られる|pipe ... grep
そして-A
最初のコンテキストオプションgrep
- しかし、私はそれが良いですsed
。
答え4
他の方法は機能しませんが、この方法は機能します(少なくともUbuntuでは)。
while true; do
ip route | grep "linkdown"
if [ $? -eq 0 ]; then
sleep 1 # network not yet up
else
break # network up
fi
done