为什么grep不在这个shell脚本中使用我的变量?

时间:2015-12-18 10:28:54

标签: linux bash shell

#!/bin/sh
#
# found if this IP is receiving data
#
#echo hexIpAdd=`sh convertIPAddressToHex $1`

hexIpAdd='C0 A8 01 02'

#`snmpwalk -v 2c -c public 192.168.252.187 .1.3.6.1.4.1.231.7.1.2.2.1.4.7.13.1.1.3301 | grep '$hexIpAdd' | wc -l`

if [ `snmpwalk -v 2c -c public 192.168.252.187 .1.3.6.1.4.1.231.7.1.2.2.1.4.7.13.1.1.3301 | grep '$hexIpAdd' | wc -l` -gt 0 ]; then
       echo "Value FOUND!!"
else
       echo "Value NOT FOUND!!"
fi

代码非常简单,我将常规IP转换为十六进制IP,并通过SNMPWALK查询网络设备,以查看转换后的IP是否正在接收流式传输。

问题是,grep管道无法使用VARIABLE,这意味着如果我将"grep '$hexIpAdd'"替换为"grep 'C0 A8 01 02'"它可以正常工作。

1 个答案:

答案 0 :(得分:0)

  1. 不要在shell
  2. 中使用单引号引用变量
  3. 使用grep -q来避免命令替换,使用wc[...]表达式进行管道处理:
  4. 这样做:

    hexIpAdd='C0 A8 01 02'
    
    if snmpwalk -v 2c -c public 192.168.252.187 .1.3.6.1.4.1.231.7.1.2.2.1.4.7.13.1.1.3301 | 
        grep -q "$hexIpAdd"; then
           echo "Value FOUND!!"
    else
           echo "Value NOT FOUND!!"
    fi