Lebih baik hindari menggunakan ifconfiguntuk mendapatkan alamat IP dalam skrip karena sudah ditinggalkan di beberapa distribusi (misalnya CentOS dan yang lainnya, jangan menginstalnya secara default lagi).
Dalam sistem lain, output ifconfig bervariasi sesuai dengan rilis distribusi (misalnya output / spasi / bidang ifconfigberbeda dari Debian 8 ke Debian 9, misalnya).
Untuk mendapatkan alamat IP ip, dengan cara yang sama Anda bertanya:
ip addr | awk ' !/127.0.0.1/ && /inet/ { gsub(/\/.*/, "", $2); print "IP="$2 } '
Atau lebih baik lagi:
$ ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '
192.168.1.249
Atau, saat Anda bertanya "IP ="
#!/bin/bash
echo -n "IP="
ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print $4 } '
Mengadaptasi ide dari @Roman tanpa malu-malu
$ ip -o -4 address show | awk ' NR==2 { gsub(/\/.*/, "", $4); print "IP="$4 } '
IP=192.168.1.249
Output normal:
$ ip -o -4 address show
1: lo inet 127.0.0.1/8 scope host lo\ valid_lft forever preferred_lft forever
2: eth0 inet 192.168.1.249/24 brd 192.168.1.255 scope global eth0\ valid_lft forever preferred_lft forever
Dari man ip:
-o, -oneline
output setiap record pada satu baris, mengganti feed baris dengan karakter '\'. Ini nyaman ketika Anda ingin menghitung catatan dengan wc (1) atau untuk grep (1) output.
Lihat satu contoh mengapa ifconfigtidak disarankan: BBB: `bbb-conf --check` menampilkan alamat IP sebagai` inet` - ifconfig kesengsaraan
Untuk memahami mengapa ifconfigada di jalan keluar, lihat Perbedaan antara perintah 'ifconfig' dan 'ip'
ifconfigberasal dari net-tools, yang belum dapat sepenuhnya mengikuti tumpukan jaringan Linux untuk waktu yang lama. Itu juga masih menggunakan ioctl untuk konfigurasi jaringan, yang merupakan cara jelek dan kurang kuat untuk berinteraksi dengan kernel.
Sekitar 2005, sebuah mekanisme baru untuk mengendalikan tumpukan jaringan diperkenalkan - soket netlink.
Untuk mengkonfigurasi antarmuka jaringan, iproute2gunakan mekanisme soket netlink dupleks penuh itu, sambil ifconfigmengandalkan panggilan sistem ioctl.