ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing
Jadi di sini kita alat di grep
mana-mana untuk baris yang berisi antarmuka kita yang menarik dan frase "status UP" (terima kasih kepada @Lekensteyn untuk menunjukkan perlunya sedikit lebih spesifik daripada hanya ). Kami menggunakan argumen sebagai formulir singkat untuk dan itu harus cukup untuk mendapatkan daftar semua kartu jaringan yang dikonfigurasi dalam sistem.ip
stdout
UP
a
address
Salah satu keuntungan menggunakan ip
adalah bahwa itu harus benar-benar tersedia di mana saja - itu adalah bagaimana saya biasanya mengkonfigurasi perangkat jaringan ponsel Android saya, misalnya.
Ini :colons
digunakan untuk menghindari kecocokan sebagian - dengan cara ini kami menjamin kecocokan untuk eth0
yang sebaliknya mungkin someothereth0
atau eth007
.
Terima kasih @RaphaelAhrens karena mendorong saya ke arah kebenaran dan menjelaskan solusi saya.
EDIT:
Untuk menangani persyaratan saat ini Anda dapat:
ip a | sed -rn '/: '"$if"':.*state UP/{N;N;s/.*inet (\S*).*/\1/p}'
Di atas hanya akan mencetak alamat ip CIDR jika target Anda $if
adalah UP, terpasang, dan memiliki satu. Untuk ipv6 solusinya sangat sederhana dengan hanya modifikasi kecil.
Jika Anda tidak suka, sed
Anda bisa mencapai hasil yang sama dengan yang lain |pipe ... grep
dan menambahkan -A
opsi konteks ke yang pertama grep
- tapi saya suka sed
.
cat /sys/class/net/ | grep eth0
harus memberi Anda data yang mudah diurai. Anda juga bisa melakukannyasudo ethtool eth0 | grep Link