在BASH脚本中获取子字符串



我试图在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

相关内容

  • 没有找到相关文章

最新更新