言う:

言う:

スクリプトが構成されていることを確認する必要があります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

関連情報