You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 06:20:41