Vài câu trả lời dường như đang sử dụng phiên bản mới hơn iplệnh (thay thế cho ifconfig) vì vậy đây là một trong đó sử dụng ip addr, grepvà awkchỉ đơn giản là in các địa chỉ IPv4 gắn liền với wlan0giao 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 inetlọc ra các dòng không chứa "inet" (IPv4 và IPv6 cấu hình) và grep -v inet6bộ 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 awkgiả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