ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing
Yani burada biz grepher yerde iparaçtır stdoutbizim ilgi arayüzü ve ifade hem içeren bir satır için "devlet UP" (sadece biraz daha fazla özgüllük ihtiyacını işaret için @Lekensteyn sayesinde UP). Argümanı akısa form olarak kullanıyoruz addressve bu sistemdeki tüm yapılandırılmış ağ kartlarının bir listesini almak için yeterli olmalı.
Kullanmanın bir avantajı, ipher yerde gerçekten mevcut olması gerektiği olabilir - örneğin Android telefonumun ağ cihazlarını sık sık nasıl yapılandırdığım.
:colonsKısmi eşleşmeleri önlemek için kullanılır - bu şekilde biz bir maç garanti eth0bir başka olası karşıt olarak someothereth0veya eth007.
Doğruluk konusunda dürtmek ve çözümümü açıklamak için @RaphaelAhrens teşekkürler.
DÜZENLE:
Mevcut gereklilikleri yerine getirmek için şunları yapabilirsiniz:
ip a | sed -rn '/: '"$if"':.*state UP/{N;N;s/.*inet (\S*).*/\1/p}'
Hedef ise yukarıda sadece bir CIDR ip adresini basacaktır $ifolan UP, takılı ve birine sahiptir. İpv6 için çözüm sadece küçük değişikliklerle olduğu kadar kolaydır.
Eğer beğenmezseniz sed, bir başkasıyla benzer sonuçlar elde edebilir |pipe ... grepve ilkine bir -Aiçerik seçeneği eklenebilir grep- ama hoşuma gider sed.
cat /sys/class/net/ | grep eth0size kolayca ayrıştırılabilir veriler vermeli. Bunları da yapabilirsinsudo ethtool eth0 | grep Link