ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing
したがって、ここではgrep、関心のあるインターフェイスと"state UP"というフレーズの両方を含む行用のユビキタスipツールを使用しstdoutます(@Lekensteynに感謝します)。引数を省略形として使用します。これは、システム内のすべての構成済みネットワークカードのリストを取得するのに十分なはずです。UPaaddress
使用ipする利点の1つは、どこでも実際に使用できることです。たとえば、Androidスマートフォンのネットワークデバイスを一般的に構成する方法です。
:colons部分一致を回避するために使用されている-このように、我々はの一致を保証するeth0それ以外の場合は可能とは対照的に、someothereth0またはをeth007。
@RaphaelAhrensが正しいことを教えてくれて、解決策を説明してくれてありがとう。
編集:
現在の要件を処理するには、次のことができます。
ip a | sed -rn '/: '"$if"':.*state UP/{N;N;s/.*inet (\S*).*/\1/p}'
上記は、ターゲット$ifがUPでプラグインされており、1つある場合にのみCIDR IPアドレスを出力します。ipv6の場合、ソリューションはわずかな変更を加えるだけで簡単です。
気に入らない場合はsed、別のもので同様の結果を達成し、最初にコンテキストオプションを|pipe ... grep追加-Aできますgrepが、私は好きsedです。
cat /sys/class/net/ | grep eth0かはわかりませんが、簡単に解析可能なデータを提供すべきです。あなたもすることができますsudo ethtool eth0 | grep Link