Daniel.82 Geschrieben 26. September 2007 Geschrieben 26. September 2007 Hallo, ich bastel gerade an einem Shellscript. Nun möchte ich aber das eine Funktion des Shellscript bzw. der Rückgabewert dieser Funktion in einer Variable gespeichert wird, damit ich diese weiterverabeiten kann. Leider habe ich es bisher nicht geschafft die Funktion über eine Variable aufzurufen. Habe auch bisher keine gescheite Info beim googlen gefunden. Vielleicht kann mir ja hier jemand den entscheidenden Tipp geben? #!/bin/bash function berechnen { temp=$1 if [ "$temp" == "" ]; then printf "CRITICAL: HOST down | KW/H=0\n" # exit 2 fi zw_erg=${temp:56} zeichen=${#zw_erg} vorkomma=$(expr $zw_erg / 10) nachkomma=${zw_erg:zeichen-1} ergebnis=$vorkomma.$nachkomma #echo "ERG " $ergebnis } psm=$(snmpget -v 1 -c public 172.24.2.222 1.3.6.1.4.1.2606.4.2.3.5.2.1.5.1) test=$(berechnen "$psm") exit 0 Der Wert egebnis der Funktion berechnen soll am Ende in der Variable test stehen. Nur ist es im Moment so, das er mit "expr: syntax error" als Fehler ausgibt.. :-( MFG Daniel Zitieren
Schlaubi Geschrieben 26. September 2007 Geschrieben 26. September 2007 Was steht denn in $psm? Sprich was genau landet in der temp Variable? Was landet in zw_erg? (hier glaub ich liegt Dein Problem Denn offensichtlich funktioniert das hier ja nicht: vorkomma=$(expr $zw_erg / 10) Zitieren
DevilDawn Geschrieben 26. September 2007 Geschrieben 26. September 2007 vorkomma=$(expr $zw_erg / 10) Der Wert egebnis der Funktion berechnen soll am Ende in der Variable test stehen. Nur ist es im Moment so, das er mit "expr: syntax error" als Fehler ausgibt.. :-( Da sollte auch besser entweder vorkomma=`expr $zw_erg / 10` oder let vorkomma=$zw_erg/10 stehen. Zitieren
Schlaubi Geschrieben 26. September 2007 Geschrieben 26. September 2007 Hallo Devil, das hat doch damit garnichts zu tun - darf ich fragen wie Du darauf kommst? Das Umschließen mit Backticks ist doch nur eine andere (veraltete) Art ein Kommando in einer Subshell auszuführen, die Variante mit $() ist hier jedoch wg. Vermeidung von Quotingproblemen zu empfehlen. Zum Syntax-Error von expr kommt es, weil die Variable $zw_erg keinen Inhalt hat - so oder so, guck mal: schlaubi:~ schlaubi$ zw_erg=""; vorkomma=$(expr $zw_erg / 10) expr: syntax error schlaubi:~ schlaubi$ zw_erg=""; vorkomma=`expr $zw_erg / 10` expr: syntax error # auch mit let würde das nicht gehen schlaubi:~ schlaubi$ zw_erg=""; let vorkomma=$zw_erg/10 bash: let: vorkomma=/10: syntax error: operand expected (error token is "/10") Deshalb meine vorherigen Fragen an den Treadersteller. Zitieren
DevilDawn Geschrieben 26. September 2007 Geschrieben 26. September 2007 Hallo Devil, das hat doch damit garnichts zu tun - darf ich fragen wie Du darauf kommst? Das liegt an Altersdemenz meinerseits wenn man nämlich geschweifte Klammern sieht wo runde Klammern stehen :upps Damit kommt man dann zum Schluß das der ausgelesene Temperaturwert nicht die erwartete Länge (56) hat. Zitieren
Schlaubi Geschrieben 26. September 2007 Geschrieben 26. September 2007 Das liegt an Altersdemenz meinerseits wenn man nämlich geschweifte Klammern sieht wo runde Klammern stehen :upps ...das kann ja mal passieren Zitieren
Daniel.82 Geschrieben 27. September 2007 Autor Geschrieben 27. September 2007 Guten Morgen, in der Variable psm steht folgendes drinne : SNMPv2-SMI::enterprises.2606.4.2.3.5.2.1.5.1 = INTEGER: 51844 Hier ist aber nur der Wert 51844 wichtig. Der Komplette Inhalt der Variable landet in der Variable temp. In zw_erg steht dann nur noch der Wert 51844. Habe das Problem aber auch soweit gelöst. Der Code sieht jetzt so aus: #!/bin/bash # Funktion zum Berechne/Anpassen des Wertes berechnen () { temp=$1 if [ "$temp" == "" ]; then printf "CRITICAL: HOST not reachable" exit 3 # Exit code for Error = Unknown fi zw_erg=${temp:56} zeichen=${#zw_erg} vorkomma=$(expr $zw_erg / 10) nachkomma=${zw_erg:zeichen-1} ergebnis=$vorkomma } #Wert der 1. PSM-Schiene psm1=$(snmpget -v 1 -c public 172.24.2.222 1.3.6.1.4.1.2606.4.2.3.5.2.1.5.1) berechnen "$psm1" psm1=$ergebnis #Wert der 2. PSM-Schiene psm2=$(snmpget -v 1 -c public 172.24.2.222 1.3.6.1.4.1.2606.4.2.4.5.2.1.5.1) berechnen "$psm2" psm2=$ergebnis #Wert der 3. PSM-Schiene psm3=$(snmpget -v 1 -c public 172.24.2.222 1.3.6.1.4.1.2606.4.2.5.5.2.1.5.1) berechnen "$psm3" psm3=$ergebnis #Wert der 4. PSM-Schiene psm4=$(snmpget -v 1 -c public 172.24.2.222 1.3.6.1.4.1.2606.4.2.6.5.2.1.5.1) berechnen "$psm4" psm4=$ergebnis #Zusammen rechnen der einzelnen Werte let totalpsm=$psm1+$psm2+$psm3+$psm4 #Ausgabe des Stromverbrauchs echo "$totalpsm KW/H | KW/H=$totalpsm" exit 0 Das Script ist evtl. an ein paar Stellen Verbesserungwürdig, aber es funktioniert.. *G Zur weiteren Info, das Script ist für Nagios gedacht. MFG Daniel Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.