Tonerstand via SNMP auslesen - Problem

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von `shl, 17.10.2008.

  1. `shl

    `shl Grünschnabel

    Dabei seit:
    06.08.2008
    Beiträge:
    5
    Zustimmungen:
    0
    Hoi,

    ich hab ein Problem mit einem Shellscript.
    Und zwar will ich den aktuellen Tonerstand via SNMP abfragen.
    Es funktionier soweit auch:
    Code:
    #!/bin/bash
    #
    # yessir
    #
    
    #Eingabeparameter (IP und Community) erkennen und als Variable setzen
    IP=`echo $1`
    community=`echo $2`
    
    #OiD-Variablen festlegen
    #Cyan
    oid_maximumcyan='1.3.6.1.2.1.43.11.1.1.8.1.1'
    oid_currentcyan='1.3.6.1.2.1.43.11.1.1.9.1.1'
    
    #Magenta
    oid_maximummagenta='1.3.6.1.2.1.43.11.1.1.8.1.2'
    oid_currentmagenta='1.3.6.1.2.1.43.11.1.1.9.1.2'
    
    #Gelb
    oid_maximumyellow='1.3.6.1.2.1.43.11.1.1.8.1.3'
    oid_currentyellow='1.3.6.1.2.1.43.11.1.1.9.1.3'
    
    #Schwarz
    oid_maximumblack='1.3.6.1.2.1.43.11.1.1.8.1.4'
    oid_currentblack='1.3.6.1.2.1.43.11.1.1.9.1.4'
    
    #Bildtrommel
    oid_maximumbildtrommel='1.3.6.1.2.1.43.11.1.1.8.1.5'
    oid_currentbildtrommel='1.3.6.1.2.1.43.11.1.1.9.1.5'
    
    #Uebertragungswalze
    oid_maximumwalze='1.3.6.1.2.1.43.11.1.1.8.1.6'
    oid_currentwalze='1.3.6.1.2.1.43.11.1.1.9.1.6'
    
    #Fixierer
    oid_maximumfuser='1.3.6.1.2.1.43.11.1.1.8.1.7'
    oid_currentfuser='1.3.6.1.2.1.43.11.1.1.9.1.7'
    
    #Fehleranzahl
    oid_fehler='1.3.6.1.2.1.43.5.1.1.18.1'
    
    #Werte auslesen
    #maximum
    maximumcyan_val=`snmpget -v 1 -c $community $IP $oid_maximumcyan | awk -F' ' '{print $4}'`
    maximummagenta_val=`snmpget -v 1 -c $community $IP $oid_maximummagenta | awk -F' ' '{print $4}'`
    maximumyellow_val=`snmpget -v 1 -c $community $IP $oid_maximumyellow | awk -F' ' '{print $4}'`
    maximumblack_val=`snmpget -v 1 -c $community $IP $oid_maximumblack | awk -F' ' '{print $4}'`
    maximumbildtrommel_val=`snmpget -v 1 -c $community $IP $oid_maximumbildtrommel | awk -F' ' '{print $4}'`
    maximumwalze_val=`snmpget -v 1 -c $community $IP $oid_maximumwalze | awk -F' ' '{print $4}'`
    maximumfuser_val=`snmpget -v 1 -c $community $IP $oid_maximumfuser | awk -F' ' '{print $4}'`
    
    #current
    currentcyan_val=`snmpget -v 1 -c $community $IP $oid_currentcyan | awk -F' ' '{print $4}'`
    currentmagenta_val=`snmpget -v 1 -c $community $IP $oid_currentmagenta | awk -F' ' '{print $4}'`
    currentyellow_val=`snmpget -v 1 -c $community $IP $oid_currentyellow | awk -F' ' '{print $4}'`
    currentblack_val=`snmpget -v 1 -c $community $IP $oid_currentblack | awk -F' ' '{print $4}'`
    currentbildtrommel_val=`snmpget -v 1 -c $community $IP $oid_currentbildtrommel | awk -F' ' '{print $4}'`
    currentwalze_val=`snmpget -v 1 -c $community $IP $oid_currentwalze | awk -F' ' '{print $4}'`
    currentfuser_val=`snmpget -v 1 -c $community $IP $oid_currentfuser | awk -F' ' '{print $4}'`
    
    
    #Fuellstand in Prozent berechnen
    #cyan
    cyan=`expr \( $currentcyan_val \* 100 \) \/ $maximumcyan_val`
    
    #magenta
    magenta=`expr \( $currentmagenta_val \* 100 \) \/ $maximummagenta_val`
    
    #yellow
    yellow=`expr \( $currentyellow_val \* 100 \) \/ $maximumyellow_val`
    
    #black
    black=`expr \( $currentblack_val \* 100 \) \/ $maximumblack_val`
    
    #bildtrommel
    bildtrommel=`expr \( $currentbildtrommel_val \* 100 \) \/ $maximumbildtrommel_val`
    
    #uebertragungswalze
    walze=`expr \( $currentwalze_val \* 100 \) \/ $maximumwalze_val`
    
    #fuser
    fuser=`expr \( $currentfuser_val \* 100 \) \/ $maximumfuser_val`
    
    
    #Fehleranzahl ausgeben
    error=`snmpget -v 1 -c $community $IP $oid_fehler | awk -F' ' '{print $4}'`
    
    #TEST:
    #Werte zurueckgeben
    #echo "$cyan | $magenta | $yellow | $black | $bildtrommel | $walze | $fuser | $error"
    
    #Exit-Codes ausgeben
    if [ $cyan -le 5 -o $magenta -le 5 -o $yellow -le 5 -o $black -le 5 -o $bildtrommel -le 5 -o $walze -le 5 -o $fuser -le 10 -o $error -ne 0 ]
    then echo 'Schwerer Fehler aufgetreten (Verbrauchsmaterial: Cyan:'`echo $cyan`'%/Magenta:'`echo $magenta`'%/Gelb:'`echo $yellow`'%/Schwarz:'`echo $black`'%/Trommel:'`echo $bildtrommel`'%/Walze:'`echo $walze`'%/Fixierer:'`echo $fuser`'%/Status:'`echo $error`')'
    exit 2
    elif [ $cyan -le 10 -o $magenta -le 10 -o $yellow -le 10 -o $black -le 10 -o $bildtrommel -le 10 -o $walze -le 10 -o $fuser -le 10 -o $error -eq 0 ]
    then echo 'Fehler aufgetreten (Verbrauchsmaterial: Cyan:'`echo $cyan`'%/Magenta:'`echo $magenta`'%/Gelb:'`echo $yellow`'%/Schwarz:'`echo $black`'%/Trommel:'`echo $bildtrommel`'%/Walze:'`echo $walze`'%/Fixierer:'`echo $fuser`'%/Status:'`echo $error`')'
    exit 1
    else
    echo 'Keine Fehler (Verbrauchsmaterial: Cyan:'`echo $cyan`'%/Magenta:'`echo $magenta`'%/Gelb:'`echo $yellow`'%/Schwarz:'`echo $black`'%/Trommel:'`echo $bildtrommel`'%/Walze:'`echo $walze`'%/Fixierer:'`echo $fuser`'%/Status:'`echo $error`')'
    exit 0
    fi
    allerdings will ich beim Werte auslesen eine "for.. in.. do.. done.."-Funktion verwenden, was dann so aussehen wuerde:

    Code:
    ...
    ...
    #Werte auslesen
    #maximum
    for i in cyan magenta yellow black bildtrommel walze fuser; do
    current`echo ip`_val=`snmpget -v 1 -c $community $IP $oid_current`echo $i` | awk -F' ' '{print $4}'`
    done
    
    #current
    for p in cyan magenta yellow black bildtrommel walze fuser; do
    current`echo $p`_val=`snmpget -v 1 -c $community $IP $oid_current`echo $p` | awk -F' ' '{print $4}'`
    done
    ...
    ...
    
    Das kann allerdings nicht ausgefuehrt werden, da er folgende "`" nicht richtig setzt (current`echo $p`_val=`snmpget -v 1 -c $community $IP $oid_current`echo $p` | awk -F' ' '{print $4}'`

    Habe mich bereits etwa 4 Stunden damit rumgespielt, und bekomms einfach nicht zum laufen.

    Hat jemand eine Loesung?

    Vielen Dank & viele Grueße,

    shl
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. chb

    chb Steirer

    Dabei seit:
    01.06.2003
    Beiträge:
    2.359
    Zustimmungen:
    0
    Ort:
    ÖSTERREICH
    schon mal versucht $() anstatt `´ zu verwenden?
     
  4. `shl

    `shl Grünschnabel

    Dabei seit:
    06.08.2008
    Beiträge:
    5
    Zustimmungen:
    0
    Etwa 2-3 mal sogar...:

    Code:
    #Werte auslesen
    #maximum
    for i in cyan magenta yellow black bildtrommel walze fuser; do
    current`echo ip`_val=$(snmpget -v 1 -c $community $IP "$oid_current`echo $i`" | awk -F' ' '{print $4}')
    done
    --> Error
     
  5. chb

    chb Steirer

    Dabei seit:
    01.06.2003
    Beiträge:
    2.359
    Zustimmungen:
    0
    Ort:
    ÖSTERREICH
    hmm und bei allen `´ - für mich schauts so aus als wär da was in der Syntax net ganz ok - aber ich kann mich auch täuschen :/
     
  6. #5 Gott_in_schwarz, 17.10.2008
    Zuletzt bearbeitet: 17.10.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Code:
    echo `echo \`echo \\\`echo foo\\\`\``
    So gehen nested-backticks. Aber mach mal bitte aus allen backticks diese $(...) Konstruktion. (Hast du nicht gemacht in deinem grade geposteten Beispiel...)
    Dann wird aus obigem Grusel nur noch dieses unschöne (aber wesentlich besser wartbare) Konstrukt:
    Code:
    echo $(echo $(echo $(echo foo)))
    Deine ganzen `echo $foo` Konstrukte kannst du übrigens einfach durch $foo (oder besser "$foo") ersetzen. `echo ip` meint höchstwahrscheinlich `echo $ip` und kann einfach durch "$ip" ersetzt werden. Mehr ist mir erstmal nicht aufgefallen...

    edit²:
    Code:
    cyan=`expr \( $currentcyan_val \* 100 \) \/ $maximumcyan_val`
    geht auch lesbarer (mit bash, die du ja schließlich verwendest...)
    Code:
    cyan="$(( ($currentcyan_val * 100) / $maximumcyan_val ))"
    edit³:
    Achso, die Fehlermeldung. Sach das doch gleich. Dann ist ganz klar bei deinem Fluxkondensator das Plutonium alle. Füll mal nach und lass das Skript dann nochmal laufen.
     
  7. #6 floyd62, 17.10.2008
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    Du solltest dir mal das "eval"-Builtin in der Shell näher ansehen: wenn du die Variablennamen erst zur Laufzeit in der Schleife zusammenbastelst ($current_cyan_val, $cyan etc.), brauchst du das. Das könnte ganz grob etwa so funktionieren:

    Code:
    MAX_OID=1.3.6.1.2.1.43.11.1.1.8.1
    CURR_OID=1.3.6.1.2.1.43.11.1.1.9.1
    
    PARAMS="cyan magenta yellow black drum transer fuser"
    
    E=echo      # Testen
    # E=eval    # Ausführen
    
    I=1
    for PARAM in $PARAMS; do
            $E "max_${PARAM}_val=\`snmpget -v 1 -c $COMMUNITY $MAX_OID.$I | awk -F ' ' '{ print \$4 }'\`"
            $E "curr_${PARAM}_val=\`snmpget -v 1 -c $COMMUNITY $CURR_OID.$I | awk -F ' ' '{ print \$4 }'\`"
            $E "$PARAM=\`expr \$curr_${PARAM}_val * 100 / \$max_${PARAM}_val\`"
            $E "echo $PARAM=\$$PARAM"
    
            I=`expr $I + 1`
    done
    
    (Und, ja, ich kenne die $(...)-Schreibweise, aber ich stolpere immer noch ab und zu über so eine alte Kiste, die keine bash oder ksh drauf hat ... muss wohl am Alter liegen :oldman)

    Gruss ...
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

Tonerstand via SNMP auslesen - Problem

Die Seite wird geladen...

Tonerstand via SNMP auslesen - Problem - Ähnliche Themen

  1. snmpd faild auth?

    snmpd faild auth?: hallo leute, ich stehe mal wieder vor einem problem das mich scho viel Zeit gekostet hat. Wie evtl. schon einige wissen, bin ich mich an...
  2. DeInstallation net-snmp

    DeInstallation net-snmp: Hallo! Mal ne kleine Frage. Und zwar wollte ich meine alte "net-snmp" Version (5.3) durch eine aktuelle 5.4 ersetzen. Bei der Deinstallation...
  3. snmp richtig einrichten

    snmp richtig einrichten: Hallo zusammen, habe gerade snmp auf meinem Red Hat System Installiert. Zur Zeit liefert mir der befehl snmpwalk-v 1 -c public "host"...
  4. snmp zugriff von ausserhalb nicht möglich!

    snmp zugriff von ausserhalb nicht möglich!: hi, ich hab ein neues opensuse 10.3 system mit snmp ausgestattet. wenn ich lokal snmpwalk -v 1 -c public ***.de system ausführe...
  5. Snmp + Befehle gehen nicht

    Snmp + Befehle gehen nicht: Hallo ! Ich habe vor kurzem net-snmp auf einen Unix System installiert, genauer HP-UX B 10.20.. Der Agent läuft auch, d.h man kann alles...