我试图在 bash 脚本中获取子字符串,但我采用的方法并不是一个好的解决方案。我正在解析“ifconfig”命令的响应并尝试获取第一个网络接口(interface)名称。
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)
获取第一个接口(interface)名称 wlan0
conf=`ifconfig`
net=${conf:670:6}
我不明白,但位置有时会改变,这就是我不能使用索引 670 的原因。Wlan0 可以是 wlan1、wlan2 等等...我无法专门搜索 wlan0。有什么建议吗?
最佳答案
GNU awk
ifconfig | awk -vRS= '!/^(eth0|lo)/{print $1;exit}'
跳过 etho 和 lo block 并打印下一个的第一个字段,然后退出。
关于linux - 在 bash 脚本中获取子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30046107/