Anda bisa melakukannya dengan banyak cara. Ini contohnya:
$ cat /sys/class/net/eth0/operstate
up
ip a show ethX up
Jika tidak ada yang ditampilkan maka antarmuka Anda sedang down
ip a | grep -Eq ': eth0:.*state UP' || _do_your_thing
Jadi di sini kita grep ip yang ada di mana-mana stdout alat untuk baris yang berisi antarmuka yang kami minati dan frasa "nyatakan UP" ( terima kasih kepada @Lekensteyn karena telah menunjukkan perlunya sedikit lebih spesifik daripada hanya UP ). Kami menggunakan argumen a sebagai kependekan dari address dan itu seharusnya cukup untuk mendapatkan daftar semua kartu jaringan yang dikonfigurasi dalam sistem.
Satu keuntungan menggunakan ip bisa jadi itu benar-benar harus tersedia di mana-mana - begitulah cara saya biasanya mengonfigurasi perangkat jaringan ponsel Android saya, misalnya.
:colons digunakan untuk menghindari kecocokan sebagian - dengan cara ini kami menjamin kecocokan untuk eth0 sebagai kebalikan dari someothereth0 yang mungkin atau eth007 .
Terima kasih @RaphaelAhrens karena mendorong saya menuju 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 ATAS, terpasang, dan memiliki satu. Untuk ipv6 solusinya sesederhana hanya dengan sedikit modifikasi.
Jika Anda tidak menyukai sed Anda dapat memperoleh hasil yang serupa dengan |pipe ... grep lainnya dan menambahkan -A opsi konteks ke grep pertama - tapi saya suka sed .