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.

Empfohlene Antworten

Veröffentlicht

Hallo Commiunity,

Ich hab da mal ne Frage.

Also schonmal vorweg. Ich kenn mich nicht gerade mit Scripten aus.

Folgendes Szenario.

Ich mache eine snmp Abfrage die aber keine Kommastellen berücksichtigt.

Also rechne ich das ganze um (dividiert durch 10)

Nun dürfen bestimmte Schwellwerte nicht überschritten werden.

(z.B. der abgefragte WERT ist 55. Dann echo "alles Klar".

Sollte der WERT aber 55 überschreiten, dann echo "Warnung".

Sollte der WERT sogar 70 überschreiten, dann echo "Critical".

Soweit sogut. Ich hoffe die Ausgangslage war verständlich.

Mein Script sieht schonmal so aus.

Code:

#!/bin/bash


WERT=`/usr/lib/nagios/plugins/check_snmp -H xxx -o xxx | awk '{print}'`

SPANNUNG=`echo "scale=2; $WERT / 10" | bc`

VERGLEICH1=`echo "scale=2; $SPANNUNG > 55" | bc`

VERGLEICH2=`echo "scale=2; $SPANNUNG > 70" | bc`

if [ $VERGLEICH2 = 1 ]

     then echo "Critical"

        if [ $VERGLEICH1 = 1 ]

     then echo "Warning"

   fi

  else echo "alles Klar"

fi

nun ist es eben so....wenn der WERT 70 überschritten wird dann bekomm ich 2 ausgaben. aber die Warning soll ja dann wegfallen.

Wie kann ich denn die meldung unterdrücken??

need help!!!

Schonmal vielen Dank im voraus.....

Gruß

Friesco

Du hast leider nicht gesagt, welche zwei Meldungen Du bekommst.


if [ $VERGLEICH2 = 1 ]

    then echo "Critical"


    if [ $VERGLEICH1 = 1 ]

        then echo "Warning"

    fi

else echo "alles Klar"

fi

Deine Einrückung finde ich ziemlich unübersichtlich, deshalb habe ich den Block mal umformatiert.

Ich kenne mich mit Batchskripts nicht gut aus, aber meinem Verständnis nach bekommst Du bei einem VERGLEICH2 von 1 und einem VERGLEICH! von 1 die zwei Warnungen und bei einem Wert von VERGLEICH2 ungleich 1 immer "alles klar", egal wie VERGLEICH1 aussieht. Warum hast Du denn überhaupt zwei Vergleichswerte berechnet? Errechne doch das Ergebnis Deiner Messung und prüfe in der if-Bedingung auf die enstprechenden Schwellwerte 55 bzw. 70.

[EDIT]musste die Formatierung noch mal anpassen. Merke: ein QUOTE-Tag ist kein CODE-Tag. :)[/EDIT]

Peter

Sorry das ich was vergessen habe.

bekommst Du bei einem VERGLEICH2 von 1 und einem VERGLEICH! von 1 die zwei Warnungen und bei einem Wert von VERGLEICH2 ungleich 1 immer "alles klar", egal wie VERGLEICH1 aussieht

Also wenn der Wert über 70 Steigt bekomm ich

Warning und Critical angezeigt. Es soll dann aber nur Critical sein.

Von Wert 56 bis 70 bekomm ich Warning (alles bestens)

von einem Wert 55 und drunter dann Meldung alles Klar.

Ich hoffe das verwirrt nicht noch mehr^^

Warum hast Du denn überhaupt zwei Vergleichswerte berechnet?

Das ist ne gute Frage......

Weil ich nicht weis wie ich das machen soll. :upps

Und ich dachte so geht es^^

Also ich frage eine Spannung ab. ist der wert unter 55 alles gut von 56 bis 70 Warnung und ab 71 Critical.

Das hatte ich vor irgendwie in das Script zu bekommen.....

Also ich habe jetzt zwar keine passende Shell, um das zu testen, aber so sollte das in etwa aussehen:

#!/bin/bash


WERT=`/usr/lib/nagios/plugins/check_snmp -H xxx -o xxx | awk '{print}'`

SPANNUNG=`echo "scale=2; $WERT / 10" | bc`


if [ $SPANNUNG <= 55 ]

    then echo "Alles klar"

elif [ $SPANNUNG <=70 ]

    then echo "Warning"

else echo "Critical"

fi

Wie gesagt, ich hab hier keine Shell, um das Skript syntaktisch zu prüfen, aber das dürfte ausdrücken, was Du willst: wenn die Spannung kleiner gleich 55, dann ist alles super, wenn sie größer 55 und kleiner gleich 70 ist, kommt die Warnung und alles andere ist kritisch.

Peter

Erstmal danke für die Hilfe.....

ja vom Prinzip her ist das richtig.

Wenn das jetzt VB wäre hätt ich das auch so gemacht.

Dann muss ich mir nur die richtige Syntax erfriemeln.

Denn so bekomm ich den fehler "Line x: =: No such file or directory

das "=" gibt da ein problem.

Dann hab ich irgendwo gelesen das man solche vergleich mit -gt für größer als und -lt für kleiner als statt "<=". Dann bekomm ich aber die Meldung das

integer expression expected.

Deswegen hatte ich die Vergleiche gemacht...

Wenns ja nur eins wäre wärs einfach....aber wenn ich den critical wert überschreite dann hab ich auch logischerweise den Warningwert überschritten.

Genau das ist mein Problem.

Ich hab die Syntax raus.

Vielen dank für den Lösungsansatz !!!!!!!!!!!

#!/bin/bash 


WERT=`/usr/lib/nagios/plugins/check_snmp -H xxx -o xxx | awk '{print}'` 

SPANNUNG=`echo "scale=2; $WERT / 10" | bc` 

VERGLEICH1=`echo "scale=2; $SPANNUNG > 55" | bc` 

VERGLEICH2=`echo "scale=2; $SPANNUNG > 70" | bc` 


if [ $VERGLEICH2 = 1 ]

   then echo "Critical" 


 elif [ $VERGLEICH1 = 1 ] 

   then echo "Warning" 


 else  

   echo "alles Klar" 


fi

Nochmal VIELEN DANK.......

EDIT:

An "elif" hatte ich nicht gedacht......

Ah, wieder was gelernt. Batchskripting ist nicht mein Spezialgebiet. Ich habe gerade noch mal nachgelesen, dass es mit -gt und -lt schon gehen sollte. Ich vermute mal, dass die Shell mit Fließkommazahlen nicht kann und ein Integer erwartet.

Zwei Anmerkungen zu Deiner Lösung habe ich noch:

1. "scale=2; " kannst Du Dir bei der Ermittlung der zwei Vergleichsvariablen sparen, weil hier ja genau keine Nachkommastellen gebraucht werden. Ein Test von "bc" unter cygwin hat mir gezeigt, dass diese Anweisung keine Auswirkung hat und sie ist auch nicht logisch.

2. Du kannst jedes "else if" durch ein geschachteltes if -> else -> if erreichen


if

    // mach was

else

    if

       mach was anderes 

    else

        mach noch was anderes

Schönes Wochenende!

Peter

1. "scale=2; " kannst Du Dir bei der Ermittlung der zwei Vergleichsvariablen sparen, weil hier ja genau keine Nachkommastellen gebraucht werden. Ein Test von "bc" unter cygwin hat mir gezeigt, dass diese Anweisung keine Auswirkung hat und sie ist auch nicht logisch.

Ja jetzt wo du es sagst macht das auch Sinn :D

Für einen Anfänger recht gut /bin/bash - Shellscripts

Danke @ Flashpixx das werde ich mir mal genauer anschauen

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

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.