大家好!中
首先是我现在的代码:
for CLSGRPID in `${${`/usr/bin/snmpwalk \
-v 1 -c $COMM $HOST $OID.11.1.1.1`##*:}%\n} | xargs` ; do
我想先处理
/usr/bin/snmpwalk -v 1 -c $COMM $HOST $OID.11.1.1.1
单独使用返回行
.2.3.1.2.1.5.11.1.1.1.1 = INTEGER: 1
.2.3.1.2.1.5.11.1.1.1.2 = INTEGER: 2
.2.3.1.2.1.5.11.1.1.1.3 = INTEGER: 3
然后对于每个返回行,我想将其剪切为${line##*:}
,然后从另一侧${line%\n}
剪切,然后将所有这些行放到xargs
并处理它。
因此请求的输出将是
1 2 3
有可能吗?请告诉我如何做到这一点。
答案 0 :(得分:1)
net-snmp
命令具有许多选项,用于修改其行为和输出。我建议您阅读每个snmpcmd
,snmpwalk
和snmp.conf
的手册页。
检查-O
中的snmpwalk
选项组(见下文)。
-Oqv
组合会生成一个只包含数字的列:
$ clsgrpids=$(
/usr/bin/snmpwalk -Oqv -v 1 -c $COMM $HOST $OID.11.1.1.1
)
$ echo "$clsgrpids"
1
2
3
删除引号以让shell打印一行:
$ echo $clsgrpids
1 2 3
以下是-O
选项组中用于控制snmpwalk
输出的其余选项:
-O OUTOPTS
Toggle various defaults controlling output display:
0: print leading 0 for single-digit hex characters
a: print all strings in ascii format
b: do not break OID indexes down
e: print enums numerically
E: escape quotes in string indices
f: print full OIDs on output
n: print OIDs numerically
q: quick print for easier parsing
Q: quick print with equal-signs
s: print only last symbolic element of OID
S: print MIB module-id plus last element
t: print timeticks unparsed as numeric integers
T: print human-readable text along with hex strings
u: print OIDs using UCD-style prefix suppression
U: don't print units
v: print values only (not OID = value)
验证(实际运行代码)
$ snmpwalk -Ov -v1 -c public localhost sysUptime
Timeticks: (66595) 0:11:05.95
$ snmpwalk -Oqv -v1 -c public localhost sysUptime
0:0:11:35.13
$ snmpwalk -Otqv -v1 -c public localhost sysUptime
70012
答案 1 :(得分:0)
您可以使用awk。
for CLSGRPID in `/usr/bin/snmpwalk -v 1 -c $COMM $HOST $OID.11.1.1.1 | awk '{print $NF}'`; do
echo $CLSGRPID
done