ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing
したがって、ここではgrep
、関心のあるインターフェイスと"state UP"というフレーズの両方を含む行用のユビキタスip
ツールを使用しstdout
ます(@Lekensteynに感謝します)。引数を省略形として使用します。これは、システム内のすべての構成済みネットワークカードのリストを取得するのに十分なはずです。UP
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
がUPでプラグインされており、1つある場合にのみCIDR IPアドレスを出力します。ipv6の場合、ソリューションはわずかな変更を加えるだけで簡単です。
気に入らない場合はsed
、別のもので同様の結果を達成し、最初にコンテキストオプションを|pipe ... grep
追加-A
できますgrep
が、私は好きsed
です。
cat /sys/class/net/ | grep eth0
かはわかりませんが、簡単に解析可能なデータを提供すべきです。あなたもすることができますsudo ethtool eth0 | grep Link