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}'
Вышеуказанный IP-адрес CIDR будет распечатан только в том случае, если ваша цель $if- UP, подключена и имеет такой адрес . Для ipv6 решение такое же простое с незначительными изменениями.
Если вам не нравится, sedвы могли бы достичь аналогичных результатов с другим |pipe ... grepи добавив -Aконтекстную опцию к первому grep- но мне нравится sed.
cat /sys/class/net/ | grep eth0должен дать вам легко анализируемые данные. Вы также можете сделатьsudo ethtool eth0 | grep Link