bash - bash命令的linux捕获输出,解析它并存储到不同的bash变量中

  显示原文与译文双语对照的内容
95 2

解释:

我有一个小的bash 脚本,它只运行任何的Linux命令( 比如 命令) 。 说 ifconfig )

ifconfig的典型输出如下所示:


eth0 Link encap:Ethernet HWaddr 30:F7:0D:6D:34:CA


 inet addr:10.106.145.12 Bcast:10.106.145.255 Mask:255.255.255.0


 inet6 addr: fe80::32f7:dff:fe6d:34ca/64 Scope:Link


 UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1


 RX packets:1104666 errors:0 dropped:0 overruns:0 frame:0


 TX packets:2171 errors:0 dropped:0 overruns:0 carrier:0


 collisions:0 txqueuelen:1000


 RX bytes:444437904 (423.8 MiB) TX bytes:238380 (232.7 KiB)



lo Link encap:Local Loopback 


 inet addr:127.0.0.1 Mask:255.255.0.0


 inet6 addr: ::1/128 Scope:Host


 UP LOOPBACK RUNNING MTU:16436 Metric:1


 RX packets:15900 errors:0 dropped:0 overruns:0 frame:0


 TX packets:15900 errors:0 dropped:0 overruns:0 carrier:0


 collisions:0 txqueuelen:0


 RX bytes:467306 (456.3 KiB) TX bytes:467306 (456.3 KiB)



现在大多数人通常做的是将整个输出into到文件/变量中,并基于该方法进行分析。 但是我想知道是否还可以将特定的输出部分放入多个变量( say ${IPETH0} 变量 carry carry carry地址 10.106.145.12 地址在上面的示例 carry地址 127.0.0.1,而不运行ifconfig命令。) 中。

Something tee 命令与输入类似,但是我希望这样做输出输出,并将输出存储到 2或者更高版本的变量中 one 。 有什么想法吗?

时间: 原作者:

84 5

$ read IPETH0 IPLO < <<$(ifconfig | awk '/inet[[:space:]]/{ print $2 }')


$ echo"${IPETH0}"


192.168.23.2


$ echo"${IPLO}"


127.0.0.1



这是 eth0lo 接口的顺序,但它显示了基本的思想。

150 4

你可以使用awk和bash数组:


arr=( $(awk -F ':' '$1 =="inet addr"{sub(/.*/,"", $2); print $2}' <<(ifconfig)) )



然后你可以执行以下操作:


read IPETH0 IPLO < <<${arr[@]}



原作者:
93 2

你可以读取每一行ifconfig并设置变量:


while read l1 ;do 


 if [[ $l1 =~ inet ]];then 


 set -- $l1 


 echo"ip is $2" 



 fi


done <<(ifconfig)



...