Bash 如何提取;“发送数据包”;从ifconfig

Bash 如何提取;“发送数据包”;从ifconfig,bash,shell,Bash,Shell,我想用bash将TX数据包计数读入一个变量。在shell上,我可以使用$ifconfig eth0 | grep“TX packets”| awk'{print$2}'| cut-d:“-f2将其提取出来,因此我尝试将其放在脚本中,并得出以下结论: 2: #!/bin/bash 3: 4: THRESHOLD=1000 5: ADAPTER="eth0" 6: IFSTR="TX packets" 7: AWKCMD= "\'\{print \$2\}\'" 8: CUTCMD="-d \":

我想用bash将TX数据包计数读入一个变量。在shell上,我可以使用
$ifconfig eth0 | grep“TX packets”| awk'{print$2}'| cut-d:“-f2
将其提取出来,因此我尝试将其放在脚本中,并得出以下结论:

2: #!/bin/bash
3: 
4: THRESHOLD=1000
5: ADAPTER="eth0"
6: IFSTR="TX packets"
7: AWKCMD= "\'\{print \$2\}\'"
8: CUTCMD="-d \":\" -f2"
9: CMD="ifconfig $ADAPTER | grep $IFSTR | awk $AWKCMD | cut $CUTCMD"
10: echo $CMD
现在它一直在抱怨AWKCMD线路:

/home/ron/scripts/keepup.sh: line 7: \'\{print $2\}\': command not found                                                             
ifconfig eth0 | grep TX packets | awk | cut -d ":" -f2  

如何让bash将其正确解释为变量?

假设您的内核是Linux,最好让内核给您自己想要的数字:

adapter=eth0
tx_packets=$(</sys/class/net/"$adapter"/tx_packets) || {
  echo "Could not find $adapter" >&2; exit 1
}
echo "Adapter $adapter sent $tx_packets packets"
但是,我不建议解析
ifconfig
的输出


请注意,此输出格式在操作系统中没有标准化,因此您不能依靠该名称的流行(对于特定于操作系统的接口配置工具)来暗示输出格式将符合任何特定标准。

假设您的内核是Linux,最好让内核给你自己想要的数字:

adapter=eth0
tx_packets=$(</sys/class/net/"$adapter"/tx_packets) || {
  echo "Could not find $adapter" >&2; exit 1
}
echo "Adapter $adapter sent $tx_packets packets"
但是,我不建议解析
ifconfig
的输出


请注意,此输出格式在操作系统中没有标准化,因此您不能依靠该名称的流行(对于特定于操作系统的接口配置工具)来暗示输出格式将符合任何特定标准。

理想情况下?不要。直接从procfs(ifconfig就是从procfs中获取数字的)中获取数字更容易、更可靠。(顺便说一句——不要使用所有caps变量名。根据,这些都是为对shell或操作系统有意义的变量保留的——您自己的变量应该至少有一个小写字符,以确保它们不会与对系统有意义的名称冲突).@codeforester,…即时问题,是的。唯一的问题,当然不是那么多。(我试图弄清楚是用基于sysfs的东西来回答这个名义上的问题,还是将它视为“我的方法为什么不起作用?”并将其作为另一个BashFAQ#50违规的副本关闭)。@cerr,
awk'/eth0/{print$11}理想情况下,不要这样做。直接从procfs(ifconfig就是从procfs中获取数字的)中获取数字要容易得多,也更可靠。也就是说,您的错误在中得到了详细的解释。(顺便说一句——不要使用所有caps变量名。根据,这些都是为对shell或操作系统有意义的变量保留的——您自己的变量应该至少有一个小写字符,以确保它们不会与对系统有意义的名称冲突).@codeforester,…即时问题,是的。唯一的问题,当然不是那么多。(我试图弄清楚是用基于sysfs的东西来回答这个名义上的问题,还是将它视为“我的方法为什么不起作用?”并将其作为另一个BashFAQ#50违规的副本关闭)。@cerr,
awk'/eth0/{print$11}