2017-09-04 10 views
0

私はSNMPを介してスイッチ上の各ポートから各パケット値を取得するSNMP監視スクリプトを構築しています。SNMPネットワークスクリプト

残念ながら、私のスクリプトは変数がどこにあるのかエラーを表示するようです。

oldin-1 = 1:

を見つけていないコマンドは、各ポート番号に変数をインクリメントするためのより良い方法だろうことをだれにも知っていますか?

#Defining Variables 
switch=192.168.0.4 
firstport=1 
lastport=26 
sleeptime=5 


function switchinfo { 
for ((counter=$firstport; counter<=$lastport; counter++)) 
do 
    sleep $sleeptime 
# echo "Working..." 

    #Connect to Host 
    in-$counter=`snmpget -v 2c -c public $switch IF-MIB::ifInOctets.$counter -Ov` 
    out-$counter=`snmpget -v 2c -c public $switch IF-MIB::ifOutOctets.$counter -Ov` 

    #Strip out the value from the string 
    in-$counter=$(echo $in-$counter | cut -c 12-) 
    out-$counter=$(echo $out-$counter | cut -c 12-) 

    #Get the difference between the old and current 
    diffin-$counter=$((in-$counter - oldin-$counter)) 
    diffout-$counter=$((out-$counter - oldout-$counter)) 

    inbps-$counter=$((diffin-$counter/sleeptime)) 
    outbps-$counter=$((diffout-$counter/sleeptime)) 

    #Basic Data Validation - Can't have values less than 0! 
    if [[ $inbps-$counter -lt 0 || $outbps-$counter -lt 0 ]]; 
    then 
     #There is an issue with one or more readings, get fresh ones 
     #then wait for the next loop to calculate again. 
     echo "We have a problem...moving to plan B" 

     in=`snmpget -v 2c -c public $switch IF-MIB::ifInOctets.$counter -Ov` 
     out=`snmpget -v 2c -c public $switch IF-MIB::ifOutOctets.$counter -Ov` 

     #Strip out the value from the string 
     in-$counter=$(echo $in-$counter | cut -c 12-) 
     out-$counter=$(echo $out-$counter | cut -c 12-) 

    else 
     #Output the current traffic 
     echo "Main current inbound traffic for Port $counter: $inbps-$counter bps" 
     echo "Main current outbound traffic for Port $counter: $outbps-$counter bps" 

     #Move the current variables to the old ones 
     oldin-$counter=$in-$counter 
     oldout-$counter=$out-$counter 

    fi 

done 
} 

echo "Press [CTRL+C] to stop..." 
while : 
do 
    switchinfo 
done 

答えて

0

より良い方法は、別の変数ではなく、配列を使用することです。アレイ番号としてポート番号を使用します。

#Defining Variables 
switch=192.168.0.4 
firstport=1 
lastport=26 
sleeptime=5 
in=() 
out=() 
diffin=() 
diffout=() 
inbps=() 
outbps=() 

function switchinfo { 
for ((counter=$firstport; counter<=$lastport; counter++)) 
do 
    sleep $sleeptime 
# echo "Working..." 

#Connect to Host 
    in[$counter]=`snmpget -v 2c -c public $switch IF-MIB::ifInOctets.$counter -Ov` 
    out[$counter]=`snmpget -v 2c -c public $switch IF-MIB::ifOutOctets.$counter -Ov` 

#Strip out the value from the string 
in[$counter]=$(echo ${in[$counter]} | cut -c 12-) 
out[$counter]=$(echo ${out[$counter]} | cut -c 12-) 

#Get the difference between the old and current 
diffin[$counter]=$((${in[$counter]} - ${oldin[$counter]})) 
diffout[$counter]=$((${out[$counter]} - ${oldout[$counter]})) 

inbps[$counter]=$((${diffin[$counter]}/sleeptime)) 
outbps[$counter]=$((${diffout[$counter]}/sleeptime)) 

#Basic Data Validation - Can't have values less than 0! 
if [[ ${inbps[$counter]} -lt 0 || ${outbps[$counter]} -lt 0 ]]; 
then 
    #There is an issue with one or more readings, get fresh ones 
    #then wait for the next loop to calculate again. 
    echo "We have a problem...moving to plan B" 

    in[$counter]=`snmpget -v 2c -c public $switch IF-MIB::ifInOctets.$counter -Ov` 
    out[$counter]=`snmpget -v 2c -c public $switch IF-MIB::ifOutOctets.$counter -Ov` 

    #Strip out the value from the string 
    in[$counter]=$(echo ${in[$counter]} | cut -c 12-) 
    out[$counter]=$(echo ${out[$counter]} | cut -c 12-) 

else 
    #Output the current traffic 
    echo "Main current inbound traffic for Port $counter: $inbps-$counter bps" 
    echo "Main current outbound traffic for Port $counter: $outbps-$counter bps" 

    #Move the current variables to the old ones 
    oldin[$counter]=${in[$counter]} 
    oldout[$counter]=${out[$counter]} 

fi 

done 
} 

echo "Press [CTRL+C] to stop..." 
while : 
do 
    switchinfo 
done