2012-11-05 65 views
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)以上 是我的shell腳本....與SNMPGET指令的每次執行它上面返回一個整數,並將值三個變量... 問題是數據表是9000個值。所以在這個腳本中,它給予了太多的時間消耗和bettelnake。的NET-SNMP(獲取/步行路程)shell腳本效率不高

任何人都可以建議我一些簡單的「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 

回答

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更有效地工作...

+0

其實我是非常新的腳本..它顯示我syntex錯誤「(」意外的第三行。請參閱這些是我的供應商特定的mibs ...就像ifindex,ifInoctets,ifOutoctects –

+0

我看到你是使用SNMPv2c已經嘗試使用snmpbulkwalk或snmpbulkget來加速數據檢索過程這裏是snmpbulkwalk手冊頁請注意,您可以使用特別是-Cr和-Cn選項配置此命令snmpbulkwalk通過避免大量的數據並且它限制了PDU的打包/解包呼叫的數量 – lucassm

+0

看到我的新代碼部分工作......在上面的問題中更新了.. –

0

我會建議,如果它正在檢索的表使用SNMPTABLE而不是步行或獲取。