Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Shell Script Funktionsaufruf

Empfohlene Antworten

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

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)


 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.

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.

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.

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

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Konto

Navigation

Suchen

Suchen

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.