あなたはそれを多くの方法で行うことができます。以下に例を示します:
$ 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" の両方を含む行の場合 ( UP
よりももう少し特異性の必要性を指摘してくれた @Lekensteyn に感謝します ) 引数 a
を使用します address
の短縮形として これで、システム内のすべての構成済みネットワーク カードのリストを取得するのに十分なはずです。
ip
を使用する利点の 1 つ どこでも利用できるようにする必要があるのかもしれません。たとえば、Android フォンのネットワーク デバイスを一般的に構成する方法です。
:colons
部分一致を避けるために使用されます - このようにして eth0
の一致を保証します そうでなければ可能な someothereth0
とは対照的に または eth007
.
@RaphaelAhrens が、私を正しい方向に動かし、解決策を説明してくれてありがとう。
編集:
現在の要件を処理するには、次のことができます。
ip a | sed -rn '/: '"$if"':.*state UP/{N;N;s/.*inet (\S*).*/\1/p}'
上記は、ターゲット $if
の場合にのみ CIDR IP アドレスを出力します。 稼働中です プラグインされており、1 つ持っています。 ipv6 の場合、ソリューションは簡単で、わずかな変更のみです。
sed
が気に入らない場合 別の |pipe ... grep
で同様の結果を得ることができます -A
を追加 context オプションを最初の grep
に - でも私は sed
が好きです .