0


大家好!
首先是我现在拥有的代码:

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

是否可以?请给我一些想法如何做到这一点。

4

2 回答 2

1

net-snmp命令有许多选项可以修改它们的行为和输出。我建议您阅读 、 和 的snmpcmd手册 snmpwalksnmp.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
于 2013-03-31T23:26:59.653 回答
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
于 2013-03-30T15:14:49.560 回答