如何在Bash脚本中仅打印SNMP查询返回的设备名称
提取SNMP输出中字符串值的方法
首先修正你脚本里的一个关键错误:变量赋值时iod=后面不能有空格,否则Shell会把iod=当作临时环境变量,直接执行后面的snmpwalk命令,无法将结果存入变量。
以下是几种可靠的解决方案:
方案1:用snmpwalk自带参数直接获取值
这是最简洁的方式,利用snmpwalk的输出控制参数-Oqv,直接返回目标字符串的值:
#!/bin/bash echo "Digite o IP" read ip iod=$(snmpwalk -v2c -c public -Oqv "$ip":161 .1.3.6.1.2.1.1.5) echo "$iod"
-Oqv的作用是:O表示控制输出格式,q(quiet)去掉额外的OID前缀,v只打印值本身。
方案2:用awk分割提取
如果需要处理已有输出,可通过双引号作为分隔符提取目标字段:
#!/bin/bash echo "Digite o IP" read ip iod=$(snmpwalk -v2c -c public "$ip":161 .1.3.6.1.2.1.1.5 | awk -F'"' '{print $2}') echo "$iod"
原理:以双引号"为分隔符,输出的第二个字段就是被引号包裹的内容。
方案3:用sed替换清除无关内容
通过正则替换去掉不需要的前缀和结尾引号:
#!/bin/bash echo "Digite o IP" read ip iod=$(snmpwalk -v2c -c public "$ip":161 .1.3.6.1.2.1.1.5 | sed 's/^.*"//;s/"$//') echo "$iod"
原理:
s/^.*"//:删除从行首到第一个双引号的所有内容s/"$//:删除行尾的双引号
内容的提问来源于stack exchange,提问作者LuizNFBR
相关产品推荐
相关产品推荐

