Sie sind nicht angemeldet.

  • »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