2012-11-06 5 views
0

linux en utilisant 2.6.18 ..script shell: tableau problème lié

/bin/bash -version 
GNU bash, version 1.14.7(1) 

(commande snmpwalk donne une sortie dans une console comme ... ci-dessous)

33 
4232 
5342 
632 
45342 
23342 
3243 

J'utilise script shell Grep données de snmp et en essayant de l'ajouter dans le tableau. mais ne peut pas le faire avec des problèmes suivants ...

#!/bin/bash 
OID="1.3.6.1.2.1.2.2.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[3]}: up=${upload[2]} down=${download[2]}" 

sortie:

+ declare -a index=1 2 
    j2.sh: 4: j2.sh: declare: not found 

(donc je ne peux pas utiliser 'Déclare')

2ème voie

#!/bin/bash 

    OUTPUT1=$(snmpbulkwalk -Oqv -c public -v 2c localhost 
    1.3.6.1.4.1.21067.4.1.1.1 2> /dev/null) 
    i=1 
    index=1 
    upload=1 
    download=1 
    for LINE in ${OUTPUT1} 
     do 
      index=$LINE 

     OUTPUT2=$(snmpget -Oqv -c public -v 2c localhost 1.3.6.1.4.1.21067.4.1.1.10.$i 2> /dev/null) 
     OUTPUT3=$(snmpget -Oqv -c public -v 2c localhost 1.3.6.1.4.1.21067.4.1.1.11.$i 2> /dev/null) 
      upload=$OUTPUT2 
      download=$OUTPUT3 
      i=`expr $i + 1` 
     done 

son donne bettelnack avec une grande quantité de données ...

3ra approch:

#!/bin/bash 
OUTPUT=$(snmpbulkwalk -Oqv -c public -v 2c localhost 
1.3.6.1.4.1.21067.4.1.1.1 2> /dev/null) 
i=0 
index[3000]=0 
for LINE in ${OUTPUT} ; do 
    index[$i]=$LINE 
    i=`expr $i + 1` 

done 

ici index [1], index [2] ...... ne sont pas Fount

Répondre

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) 

Pourquoi vous essayez de le faire sur une seule ligne? Faites ceci sur des lignes séparées et cela devrait fonctionner.

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) 

Si cela ne fonctionne pas, quelle version de Bash utilisez-vous? Qu'obtenez-vous de /bin/bash --version?

+0

Deux autres options: séparez les commandes avec un point-virgule, ou déclarez les trois variables dans la même commande: 'declare -a index = $ (...) upload = $ (...) download = $ (. ..) ' – chepner

+0

J'ai fait dans la ligne séparée. Il suffit de coller l'erreur ici .. désolé .. Mais mon bash ne supporte pas "déclarer" ou toute sorte de déclaration de tableau normale .... pouvez-vous m'aider avec cela? –

+0

/bin/bash -version GNU bash, version 1.14.7 (1) {Je ne peux pas mettre à niveau la version de bash sur mon serveur} –