ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing
Jadi di sini kita alat di grepmana-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.ipstdoutUPaaddress
Salah satu keuntungan menggunakan ipadalah bahwa itu harus benar-benar tersedia di mana saja - itu adalah bagaimana saya biasanya mengkonfigurasi perangkat jaringan ponsel Android saya, misalnya.
Ini :colonsdigunakan untuk menghindari kecocokan sebagian - dengan cara ini kami menjamin kecocokan untuk eth0yang sebaliknya mungkin someothereth0atau 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 $ifadalah UP, terpasang, dan memiliki satu. Untuk ipv6 solusinya sangat sederhana dengan hanya modifikasi kecil.
Jika Anda tidak suka, sedAnda bisa mencapai hasil yang sama dengan yang lain |pipe ... grepdan menambahkan -Aopsi konteks ke yang pertama grep- tapi saya suka sed.
cat /sys/class/net/ | grep eth0harus memberi Anda data yang mudah diurai. Anda juga bisa melakukannyasudo ethtool eth0 | grep Link