ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing
Yani burada biz grep
her yerde ip
araçtır stdout
bizim 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ı a
kısa form olarak kullanıyoruz address
ve bu sistemdeki tüm yapılandırılmış ağ kartlarının bir listesini almak için yeterli olmalı.
Kullanmanın bir avantajı, ip
her 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.
:colons
Kısmi eşleşmeleri önlemek için kullanılır - bu şekilde biz bir maç garanti eth0
bir başka olası karşıt olarak someothereth0
veya 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 $if
olan 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 ... grep
ve ilkine bir -A
içerik seçeneği eklenebilir grep
- ama hoşuma gider sed
.
cat /sys/class/net/ | grep eth0
size kolayca ayrıştırılabilir veriler vermeli. Bunları da yapabilirsinsudo ethtool eth0 | grep Link