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
.