2017-09-04 3 views
0

Je cherche à créer un script de surveillance SNMP qui récupère chaque valeur de paquet de chaque port du commutateur via SNMP.Script de réseau SNMP

Malheureusement, le script que j'ai semble me donner des erreurs là où se trouvent les variables.

Oldin-1 = 1: command not found

Est-ce que quelqu'un sait ce que serait une meilleure façon d'augmenter les variables dans chaque numéro de port?

#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 

Répondre

0

Le meilleur moyen serait d'utiliser des tableaux, pas des variables séparées. Utilisez le numéro de port en tant qu'index de tableau.

#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