我试图在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。有什么建议吗?
发布于 2015-05-05 07:22:51
GNU awk
ifconfig | awk -vRS= '!/^(eth0|lo)/{print $1;exit}'跳过etho和lo块,打印下一个字段的第一个字段,然后退出。
发布于 2015-05-05 06:58:59
起初,我认为问题是要得到所有的无线局域网,并回答如下:
$ 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发布于 2015-05-05 07:10:05
像这样的东西呢?
ifconfig | grep -v "^ " "eth0" "lo" | head -1 | cut -c1-6但是没有一个Linux pc来测试它。
基本上,我只提取所有具有网络接口名称的行,删除所有的eth0和lo内容,然后得到第一个,只得到我需要的字符。
https://stackoverflow.com/questions/30046107
复制相似问题