Vài câu trả lời dường như đang sử dụng phiên bản mới hơn ip
lệnh (thay thế cho ifconfig
) vì vậy đây là một trong đó sử dụng ip addr
, grep
và awk
chỉ đơn giản là in các địa chỉ IPv4 gắn liền với wlan0
giao diện:
ip addr show wlan0|grep inet|grep -v inet6|awk '{print $2}'|awk '{split($0,a,"/"); print a[1]}'
Mặc dù không phải là giải pháp nhỏ gọn hoặc lạ mắt nhất, nhưng nó (được cho là) dễ hiểu (xem giải thích bên dưới) và sửa đổi cho các mục đích khác, chẳng hạn như lấy 3 octet cuối cùng của địa chỉ MAC như sau:
ip addr show wlan0|grep link/ether|awk '{print $2}'|awk '{split($0,mac,":"); print mac[4] mac[5] mac[6]}'
Giải thích: ip addr show wlan0
xuất ra thông tin được liên kết với giao diện mạng được đặt tên wlan0
, tương tự như sau:
4: wlan0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether dc:a6:32:04:06:ab brd ff:ff:ff:ff:ff:ff
inet 172.18.18.1/24 brd 172.18.18.255 scope global noprefixroute wlan0
valid_lft forever preferred_lft forever
inet6 fe80::d340:5e4b:78e0:90f/64 scope link
valid_lft forever preferred_lft forever
Tiếp grep inet
lọc ra các dòng không chứa "inet" (IPv4 và IPv6 cấu hình) và grep -v inet6
bộ lọc ra các dòng còn lại mà làm chứa "inet6", mà nên kết quả trong một dòng như thế này:
inet 172.18.18.1/24 brd 172.18.18.255 scope global noprefixroute wlan0
Cuối cùng, thao tác đầu tiên awk
giải nén trường "172.18.18.1/24" và thao tác thứ hai xóa mặt nạ mạng, chỉ để lại địa chỉ IPv4.
Ngoài ra, tôi nghĩ điều đáng nói là nếu bạn đang viết kịch bản thì thường có nhiều công cụ phong phú hơn và / hoặc mạnh mẽ hơn để thu thập thông tin này, mà bạn có thể muốn sử dụng thay thế. Ví dụ: nếu sử dụng Node.js thì có ipaddr-linux
, nếu sử dụng Ruby thì có linux-ip-parser
, v.v.
Xem thêm /unix/119269/how-to-get-ip-address-using-shell-script