Zum Inhalt springen

Variable ignorieren?


Friesco

Empfohlene Beiträge

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.....

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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.

Link zu diesem Kommentar
Auf anderen Seiten teilen

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......

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

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...