Friesco Geschrieben 11. September 2009 Teilen Geschrieben 11. September 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kingofbrain Geschrieben 11. September 2009 Teilen Geschrieben 11. September 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Friesco Geschrieben 11. September 2009 Autor Teilen Geschrieben 11. September 2009 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..... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kingofbrain Geschrieben 11. September 2009 Teilen Geschrieben 11. September 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Friesco Geschrieben 11. September 2009 Autor Teilen Geschrieben 11. September 2009 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Friesco Geschrieben 11. September 2009 Autor Teilen Geschrieben 11. September 2009 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...... Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
kingofbrain Geschrieben 11. September 2009 Teilen Geschrieben 11. September 2009 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
flashpixx Geschrieben 11. September 2009 Teilen Geschrieben 11. September 2009 Für einen Anfänger recht gut /bin/bash - Shellscripts Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Friesco Geschrieben 14. September 2009 Autor Teilen Geschrieben 14. September 2009 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 Für einen Anfänger recht gut /bin/bash - Shellscripts Danke @ Flashpixx das werde ich mir mal genauer anschauen Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
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.