我试图在bash脚本中获得子字符串,但是我的方式不是一个好的解决方案。我正在解析" ifconfig"命令的响应,并尝试获取第一个网络接口名称。
IFCONFIG的结果:
eth0 Link encap:Ethernet HWaddr b8:27:eb:6d:a1:92
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:73 errors:0 dropped:0 overruns:0 frame:0
TX packets:73 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:7099 (6.9 KiB) TX bytes:7099 (6.9 KiB)
wlan0 Link encap:UNSPEC HWaddr ****
UP BROADCAST RUNNING PROMISC MULTICAST MTU:1500 Metric:1
RX packets:792698 errors:0 dropped:792552 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:219274179 (209.1 MiB) TX bytes:0 (0.0 B)
wlan5 Link encap:Ethernet HWaddr ****
inet addr:**** Bcast:**** Mask:****
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:48934 errors:0 dropped:3422 overruns:0 frame:0
TX packets:21217 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:14458518 (13.7 MiB) TX bytes:2692948 (2.5 MiB)
获取第一个接口名称是WLAN0
conf=`ifconfig`
net=${conf:670:6}
我不明白,但是位置有时会改变这就是为什么我不能使用索引670。WLAN0可以是WLAN1,WLAN2等...我无法具体搜索WLAN0。有任何建议吗?
gnu awk
ifconfig | awk -vRS= '!/^(eth0|lo)/{print $1;exit}'
跳过精神并封锁并打印下一个字段,然后退出。
起初,我认为问题是要获得所有wlans并回答:
$ ifconfig | egrep -A6 '^wlan[0-9]:'
,但随后指出这是GNU,而不是BSD,所以我应该说
$ ifconfig | egrep -A6 '^wlan[0-9]'
(无结肠)。然后澄清说,只有第一个需要,所以也许
$ ifconfig | head -n 6
是一个更好的答案?
如果任何描述中都没有6行,那么这不是一个很好的答案。
另一种方法是:
$ ifconfig eth0 || ifconfig lo0 || ifconfig wlan0 || ifconfig wlan1
等等。||
表示如果第一部分失败,请尝试第二部分。您将收到错误消息,直到击中一条有效的消息为止。
现在这里有更好的东西!
$ ifconfig | head -n 1
将为您提供第一个。沿该行,切出线上的第一件事,然后将其传递给ifconfig
。这应该在Linux上工作:
$ ifconfig | head -n 1 | awk '{print $1}' | xargs ifconfig
呢?
ifconfig | grep -v "^ " "eth0" "lo" | head -1 | cut -c1-6
没有测试的Linux PC。
基本上,我只是提取所有具有网络界面名称的行,删除所有eth0和lo东西,然后我得到第一个,只得到我需要的chars