用特定文本</ip_address>替换SNMP“超时:没有来自<ip_address>的响应”

时间:2013-12-02 08:43:14

标签: linux snmp

我有一个通过SNMPWalk查询OID详细信息的脚本,问题是当某个IP(例如172.20.36.8)无法访问时,它会显示Timeout: No Response from 172.20.36.8。是否有代码可以从snmp查询中替换该响应,以便如果它显示如此,我想显示“Idle”而不是“Timeout:...”

这是我正在运行的脚本的一部分:

for EACH in `echo $APIP`
  do
    SectorID=`$SNMPWALK -v2c -c Canopy ${EACH} ${SNMPOID}.1.1.16 | awk '{print $4}'
    ActiveSubs=`$SNMPWALK -v2c -c Canopy ${EACH} ${SNMPOID}.1.7.1 | awk '{print $4}'
    UniqueSubs=`$SNMPWALK -v2c -c Canopy ${EACH} ${SNMPOID}.1.7.18 | awk '{print $4}'
    printf "%s\t| %s\t| %s\t| %s\t|\n" "${EACH}" "${SectorID}" "${ActiveSubs}" "${UniqueSubs}"
  done

现在这是脚本

的所述部分的结果
172.20.36.3     |   1   |      2        |      4        |
172.20.36.4     |   2   |      5        |      8        |
172.20.36.5     |   3   |      11       |      16       |
Timeout: No Response from 172.20.36.6
Timeout: No Response from 172.20.36.6
Timeout: No Response from 172.20.36.6
172.20.36.6     |       |               |      0        |
172.20.36.7     |   5   |      0        |      1        |
Timeout: No Response from 172.20.36.8
Timeout: No Response from 172.20.36.8
Timeout: No Response from 172.20.36.8
172.20.36.8     |       |               |      0        |

当它到达IP地址.6.8时,会显示"Timeout: No Response..."。如果它没有遇到来自所述IP地址的响应,我想以某种方式显示它:

172.20.36.3     |   1   |      2        |      4        |
172.20.36.4     |   2   |      5        |      8        |
172.20.36.5     |   3   |      11       |      16       |
172.20.36.6     |  Idle |     Idle      |     Idle      |
172.20.36.7     |   5   |      0        |      1        |
172.20.36.8     |  Idle |     Idle      |     Idle      |

那里的任何人都可以帮我解决这个问题吗?非常感谢您的回复。 :)

1 个答案:

答案 0 :(得分:1)

你应该可以这样做:

SectorID=`$SNMPWALK -v2c -c Canopy ${EACH} ${SNMPOID}.1.1.16 2>&1 | sed 's/Timeout: No Response.*/Idle/'`
if [ "$SectorId" != "Idle" ] ; then
    SectorID=`echo $SectorID | awk '{ print $4 }'`
fi

但是,该脚本的复杂性正在迅速增长,我更想在一个更好的脚本环境中重写它而不是sh(我不是在抨击bash;我一直都在使用它),比如python或perl 。但是如果你想使用* sh,我至少会实现一个函数来为你做一次处理而不是重复上面4次。但我会将其作为读者的练习。