• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[gelöst] Shellscript funktioniert nicht

noms

Member
Hi!

Ich habe schon wieder ein Problem mit einem Script. Das Script sieht wie folgt aus:
Code:
#! /bin/bash
NAGIOSPROC=$(/usr/local/nagios/libexec/check_nagios -e 5 -F /usr/local/nagios/var/nagios.log -C /usr/local/nagios/bin/nagios)
if [ 'echo "$NAGIOSPROC" | grep -o "NAGIOS OK"' = "NAGIOS OK" ] ; then
echo "process ok"
else
echo "process nok"
fi

Wenn ich das Script ausführe, erhalte ich immer die Ausgabe "process nok", obwohl der Inhalt der Variable NAGIOSPROC zB. so aussieht:
Code:
NAGIOS OK: 5 processes, status log updated 255 seconds ago

Hat jemand eine Idee was da falsch ist?

Vielen Dank schon mal für eure Antworten!

Beste Grüße,

noms
 

abgdf

Guru
Und? Ist
Code:
'echo "$NAGIOSPROC" | grep -o "NAGIOS OK"'
etwa gleich
Code:
"NAGIOS OK"
???

Jetzt lern' das endlich mal von Grund auf! Hier mein Tutorial:

http://www.angelfire.com/linux/tux25/bash/bash.html

Gruß
 
OP
N

noms

Member
Hi abgdf!

Danke erstmal für Deine Antwort!

Natürlich ist:
Code:
NAGIOS OK: 5 processes, status log updated 255 seconds ago

nicht gleich:
Code:
NAGIOS OK

Aber mit:
Code:
grep -o "NAGIOS OK"

Sollte doch "NAGIOS OK" daraus werden, oder täusche ich mich?

Ich werde mir Dein Tutorial, wie auch zahlreiche andere, die ich schon durchgelesen habe, natürlich auch noch zu Gemüte ziehen!

Beste Grüße,

noms
 
A

Anonymous

Gast
Dann häng doch das grep oben noch mit ran, dann wirds leichter, test versteht scheinbar überhaupt nicht, was du von ihm willst. Manpage oder info hilft nötfalls immer weiter ;)
Code:
NA=$(/usr/lib/nagios/plugins/check_nagios -e 5 -F /var/log/nagios/nagios.log -C /usr/sbin/nagios | grep -o "NAGIOS OK")
if [ "$NA" = "NAGIOS OK" ] ;then 
    echo "process ok"
 else echo "process nok"
 fi
Bei dir allerdings alles andere Pfade

robi
 

abgdf

Guru
Das Problem oben war, daß Du einfache Anführungszeichen ' verwendet hast. Die bedeuten, daß alles darin wörtlich gemeint ist und nicht ersetzt wird. Also
Code:
echo '$a'
gibt Dollar a aus und nicht den Inhalt der Variablen $a.
Code:
'echo "$NAGIOSPROC" | grep -o "NAGIOS OK"'
ist also echo Dollar NAGIOSPROC usw und nicht die Ausgabe eines Befehls.
Für letzteres müßtest Du Backticks ` oder $(Befehl) verwenden.

Innerhalb einer if-Bedingung könnte aber auch das unglücklich sein.
noms schrieb:
Ich werde mir Dein Tutorial, wie auch zahlreiche andere, die ich schon durchgelesen habe, natürlich auch noch zu Gemüte ziehen!
Ich hatte natürlich auch schon viele gelesen, aber die meisten fand' ich recht unverständlich. Sonst hätte ich ja auch nicht noch eins geschrieben. Ich hoffe also, daß meines etwas verständlicher ist, bzw. etwas schneller zur Sache kommt als andere.
Im Großen und Ganzen bin ich aber kein besonders großer Freund der Shell, genau wegen dieser manchmal schwer verständlichen Ersetzungen, der schlechten Codelesbarkeit und manchmal unerwarteter Reichweiten von Variablen (in Subshells) usw.. Wenn's geht, verwende ich lieber Perl oder, bei größeren Programmen Python. Trotzdem kommt man natürlich bei Arbeiten auf Datei- und Verzeichnisebene mit speziellen Datei- oder Systemtools kaum um die Shell herum. Aber im Prinzip ist Datenverarbeitung damit ziemlich grauenhaft :mrgreen:.

Gruß
 
OP
N

noms

Member
Hi!

Ist mir total peinlich, dass ich diesen Thread "vergessen" habe! :eek:ps:

So funktionierts:
Code:
NA=$(/usr/lib/nagios/plugins/check_nagios -e 5 -F /var/log/nagios/nagios.log -C /usr/sbin/nagios | grep -o "NAGIOS OK")

Recht herzlichen Dank nochmal an alle!

Viele Grüße,

noms
 
Oben