獲取本地接口的MAC和IP地址信息的最簡單方法是'ifconfig'命令,通常位於'/ sbin/ifconfig'。 就我而言,我使用的爲wlan0作爲我的主界面:
# /sbin/ifconfig wlan0
wlan0 Link encap:Ethernet HWaddr 86:75:30:9a:09:87
inet addr:10.20.30.40 Bcast:10.20.30.255 Mask:255.255.255.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1276663 errors:0 dropped:0 overruns:0 frame:0
TX packets:820927 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:1233280913 (1.2 GB) TX bytes:105410513 (105.4 MB)
最簡單的例子,以獲得您想要的輸出使用組合回波/ grep的/ SED/AWK:
echo $(/sbin/ifconfig wlan0 | \
grep -oE "(HWaddr\ |inet\ addr:)[0-9a-fA-F:\.]+" | \
sed 's/^\(HWaddr \|inet addr\:\)//') | \
awk '{print $2"*"$1}'
簡介:
在grep的使用「-o」選項將輸出只有什麼是行內的匹配,而不是線路本身。
'-E'告訴grep期望在匹配條件中使用「擴展正則表達式」。在這種情況下,我們正在查找以「HWaddr」或「inet addr:」開始的條目,然後是字符'0-9','a-z','A-Z','或''。
如果在那裏結束該命令,則剩下兩行看起來像「HWaddr 86:75:30:9a:09:87」和「inet addr:10.20.30.40」。
我們只需要MAC和IP地址,所以我們告訴sed從行首開始('^'表示開始)拋棄「HWaddr」和「inet addr:」。
通過將該命令封裝在'$()'中捕獲該輸出的輸出將使兩行成爲一行,並用空格分隔。將這個添加到'echo'命令允許我們使用awk用'*'替換空格,使得最終的輸出類似於原始的'arp | awk'命令。
,我們還剩下什麼是這樣的:
# echo $(/sbin/ifconfig wlan0 | grep -oE "(HWaddr\ |inet\ addr:)[0-9a-fA-F:\.]+" | sed 's/^\(HWaddr \|inet addr\:\)//') | awk '{print $2"*"$1}'
10.20.30.40*86:75:30:9a:09:87
你也可以做到這一點在純bash腳本,通過使用其內置的正則表達式引擎:
# IFS=$'\n' echo $(IFS=$'\n';
for LINE in $(ifconfig wlan0);
do if [[ "${LINE}" =~ .*(HWaddr\ |inet\ addr:)([0-9a-fA-F\:\.]+) || "${LINE}" =~ .*inet\ addr:([\d\.]+) ]];
then echo ${BASH_REMATCH[2]};
fi; done) | \
awk '{print $2"*"$1}'
172.16.17.40*a0:88:b4:78:65:04
...但它更痛苦的解釋:-P
你打算如何處理多個網卡?另外,'ip addr show'通常是一個好方法。 – 2014-08-28 18:15:02