Zum Inhalt springen

Shell Script Funktionsaufruf


Daniel.82

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...