Net-snmp(get / walk)的shell脚本效率不高

时间:2012-11-05 08:47:09

标签: bash shell snmp net-snmp

#!/bin/bash
for i in `seq 1 3000`
do
    index=`snmpget -v 2c -c public -Oqv localhost 1.3.6.1.4.1.21067.4.1.1.1.$i` 
done

for i in `seq 1 3000`
do
    upload=`snmpget -v 2c -c public -Oqv localhost 1.3.6.1.4.1.21067.4.1.1.10.$i` 
done

for i in `seq 1 3000`
do
    download=`snmpget -v 2c -c public -Oqv localhost 1.3.6.1.4.1.21067.4.1.1.11.$i` 
done

(Ubuntu的12.04) 上面是我的shell脚本....每次执行snmpget命令它都返回一个整数并将值存储在上面的三个变量中...... 问题是数据表是9000个值。因此,使用这个脚本,它会给予太多的时间消耗和光明。

任何人都可以建议我使用一些简单的“SNMPWALK”(或其他任何东西)脚本,我可以将所有这些数据存储到一个数组[9000]或三个解析,三个不同的数组,索引为1到3000.所以我可以尽可能减少时间。

例如:snmpwalk -v 2c -c public -Oqv localhost 1.3.6.1.4.1.21067给出了所有值,但我不知道如何将所有这些存储在具有不同索引的数组中。 .................................................. ................

看到我在下面尝试过:但是给了我错误......

cat script.sh

 #!/bin/sh
OUTPUT1=$(snmpbulkwalk -Oqv -c public -v 2c localhost 1.3.6.1.2.1.2.2.1.1 2> /dev/null)
i=1
for LINE in ${OUTPUT1} ;
    do
        OUTPUT1[$i]=$LINE;
        i=`expr $i + 1`
    done

sh script.sh
j4.sh: 6: j4.sh: OUTPUT1[1]=1: not found
j4.sh: 6: j4.sh: OUTPUT1[2]=2: not found

2 个答案:

答案 0 :(得分:0)

尝试这样的事情:

OID="1.3.6.1.4.1.21067.4.1.1"

declare -a index=($(snmpwalk-v 2c -c public -Oqv localhost ${OID}.1))
declare -a upload=($(snmpwalk-v 2c -c public -Oqv localhost ${OID}.10))
declare -a download=($(snmpwalk-v 2c -c public -Oqv localhost ${OID}.11))

echo "retrieved ${#index[@]} elements"
echo"#${index[1]}: up=${upload[1]} down=${download[1]}

请注意,一般情况下我会建议使用一些更高级别的语言(比如 python )而不是 bash 来更有效地使用snmp ...

答案 1 :(得分:0)

我建议你检索的表是否使用SNMPTABLE而不是walk或get。