0
#!/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)上記は私のシェルスクリプトです....snmpgetコマンドを実行するたびに、整数を返し、上記の3つの変数に値を格納します...問題は、データテーブルが9000の値であることです。したがって、このスクリプトでは、時間がかかりすぎて、ベテルネイクが発生します。

このすべてのデータを単一の配列[9000]または3つの解析で、1から3000のインデックスを持つ3つの異なる配列に保存できる、単純な「SNMPWALK」(またはその他のもの)を使用したスクリプトを提案できますか.so可能な限り時間を短縮できます。

例: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
4

2 に答える 2

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]}

一般に、snmpでより効率的に作業するには、 bashではなく高レベル言語(pythonなど)を使用することをお勧めします...

于 2012-11-05T12:04:33.537 に答える