Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Ubuntu-Forum & Kubuntu-Forum | www.Ubuntu-Forum.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

  • »catweasel« ist der Autor dieses Themas

Beiträge: 46

Registrierungsdatum: 28.07.2006

Derivat: anderes Ubuntu-Derivat

Architektur: 64-Bit PC

Desktop: Cinnamon

Andere Betriebssysteme: Mint 18.2

  • Nachricht senden

1

08.02.2017, 15:08

SNMPWALK Ergebnis als Array weiterverarbeiten

Hallo

Ich habe ein Problem das ich einfach nicht gelöst bekomme:


Eine Abfrage mit SNMPWALK hat folgendes Ergebnis, das ich jetzt weiterverarbeiten muß:
.1.3.6.1.4.1.9.10.24.1.2.2.1.4.2.31990 = STRING: "UGWGRAZ1" .1.3.6.1.4.1.9.10.24.1.2.2.1.4.2.53969 = STRING: "UGWGOP11"

Dabei handelt es sich um zwei Ergebnisse die in einer Zeile stehen, nämlich:
.1.3.6.1.4.1.9.10.24.1.2.2.1.4.2.31990 = STRING: "UGWGRAZ1"
und
.1.3.6.1.4.1.9.10.24.1.2.2.1.4.2.53969 = STRING: "UGWGOP11"

Allerdings kann es mal auch nur ein Ergebnis, oder mehr sein, aber immer im Format: .1.3.6.1.4.1.9.10.24.1.2.2.1.4.2.<id> = STRING: "<Name>"

Mich interessieren hier die Teile: "31990" / "UGWGRAZ1" sowie "53969" / "UGWGOP11" mit denen ich weiterarbeiten muß


Hier ein Beispielskript wie ich es versucht habe. Es mißlingt aber weil das Ergebnis nicht wirklich als Array, sondern als eine einzelne Zeile vorliegt

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#/bin/bash

# Ergebnis von einem SNMPWALK:
array='.1.3.6.1.4.1.9.10.24.1.2.2.1.4.2.31990 = STRING: "UGWGRAZ1" .1.3.6.1.4.1.9.10.24.1.2.2.1.4.2.53969 = STRING: "UGWGOP11"'

for ((i=0; i<${#array[*]}; i++)) do

  id=`echo ${array[$i]} | awk -F' ' '{print $1}' | awk -F. '{print $17}'`    # ID ermitteln
  partner=`echo ${array[$i]} | awk -F' ' '{print $4}' | tr -d '"'`           # Name ermitteln und Hochkommas entfernen

  echo $id
  echo $partner

done


Ich bekomme hier nur die Ergebniss des ersten Teils, also "31990" und "UGWGRAZ1" mit echo ausgegeben.

Quellcode

1
2
3
./test2.sh
31990
UGWGRAZ1


Was mache ich hier falsch, bzw. wie kann ich beliebig viele Ergebnisse verarbeiten?
Ich hoffe mir kann da jemand weiterhelfen.

Gruß
Michael

2

08.02.2017, 18:09

Du musst die Strings entsprechend bereinigen, damit du das Array bash-konform füllen kannst.

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#/bin/bash

# Ergebnis von einem SNMPWALK:
array=(.1.3.6.1.4.1.9.10.24.1.2.2.1.4.2.31990=UGWGRAZ1 .1.3.6.1.4.1.9.10.24.1.2.2.1.4.2.53969=UGWGOP11)

for ((i=0; i<${#array[*]}; i++)) do
  {
  # Nur einer von vielen Wegen der Weiterverarbeitung:
  id=`echo ${array[$i]} | sed 's/.*\.//g; s/=.*//g'`    # ID ermitteln
  partner=`echo ${array[$i]} | sed 's/.*=//g'`    # Name ermitteln
  
  echo $id
  echo $partner
  }
done
Beim Erstellen dieser Nachricht kamen keine Tiere zu Schaden.
me is all sausage
but don't call me Ferdl

  • »catweasel« ist der Autor dieses Themas

Beiträge: 46

Registrierungsdatum: 28.07.2006

Derivat: anderes Ubuntu-Derivat

Architektur: 64-Bit PC

Desktop: Cinnamon

Andere Betriebssysteme: Mint 18.2

  • Nachricht senden

3

08.02.2017, 18:45

Du musst die Strings entsprechend bereinigen, damit du das Array bash-konform füllen kannst

Danke für die Info, ich werde es mal testen

(Ich habe hier übrigens das ! in der Shebang-Zeile vergessen)


Gruß
Michael

4

08.02.2017, 21:08

Ich habe hier übrigens das ! in der Shebang-Zeile vergessen
Stimmt.
Kann ins Auge gehen :)
Beim Erstellen dieser Nachricht kamen keine Tiere zu Schaden.
me is all sausage
but don't call me Ferdl