PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Shellscript: Wo ist der Fehler?



Linuxfreak
24-09-2001, 18:25
Hallo,

ich habe ein gannzz einfaches Shellscript geschrieben, leider klappt es nicht:

#!/bin/sh
PATH=/usr/bin:/usr/sbin:/sbin:/bin
ps aux | grep "squid -sYD" |grep -v grep >squid.test
if grep "squid -sYD" /usr/local/bin/squid.test
then
echo squid wird gestoppt
else
echo sstop killed
fi

Was macht das script nicht:
Wenn "squid -sYD" vorhanden ist, soll squid gestoppt werden. DAS macht er.
Ist "squid -sYD" nicht vorhanden, soll sich das Programm beenden.
Tja da ist das Problem. Das Programm stopt nicht. Es macht immer die "then" Anweisung. Egal ob in squid.test was drin steht oder nicht.
Wo ist da mein Gedankenfehler?

Tipps?
Danke und

[ 24. September 2001: Beitrag editiert von: Linuxfreak ]

micha
24-09-2001, 19:15
Hallole,

versuch mal


if [ -z $(grep "squid -sYD" /usr/local/bin/squid.test) ]
then
...
fi


Die eckigen Klammern nach if sind die Kurzform für "test". Du könntest auch


test -z $(grep "squid -sYD" /usr/.....)

schreiben, allerdings geht Dir da die else - Schleife verloren. das "grep" musst Du in "$()" packen, da Du ja die Ausgabe des PRogramms willst. Grep gibt die Zeile mit dem Suchbegriff aus, oder nichts, wenn der Suchbegriff nicht enthalten ist. Genau das macht die Options -z bei test - auf nichts überprüfen.

Du könntest noch die 2te und 3te Zeile zusammenfassen, dann müsstest Du nicht extra in ne Datei schreiben:



if [ -z $(ps aux | grep "squid -sYD" |grep -v grep) ]
then
...
fi


Gruß micha

micha
24-09-2001, 19:18
Mhm, was laber ich da, Du musst nicht auf Nichts sondern auf Etwas überprüfen, also nicht "-z" sondern "-n":



if [ -n $(ps aux | grep "squid -sYD" |grep -v grep) ]
then
...
fi


Gruß micha

Linuxfreak
25-09-2001, 06:52
Hallo Micha,

danke, werde ich heute abend gleich testen.

Gruss Frank

Christoph
25-09-2001, 08:11
Hallo,

deine kuriose Konstruktion zur Prüfung ob squid läuft evtl. auch einfacher:
grep gibt 0 zurück, wenn es was findet und sonst 1.

Beispiel:
grep bla /datei/bla >/dev/null && echo gefunden

Christoph

mightymike99
25-09-2001, 17:48
...oder noch etwas kuerzer:
grep -q bla /datei/bla && echo gefunden

Ciao
fork

Orpheus
25-09-2001, 21:34
Moin, moin,

was aber immer noch nicht die Frage
beantwortet, warum sein script nicht
funzt.

Also hab's ich 'mal ausprobiert und
siehe da, es geht doch :)

Vermutung:
Du hast das Script (bei laufendem squid) mal in '/usr/local/bin' ausprobiert
und bist dann nach '/' oder wohin auch immer gegangen und es mittels
'sh /usr/local/bin/sstop.sh' gestartet,
sodass 'squid.test' 2-mal vorhanden ist.(einmal im 'pwd' und einmal im '/usr/local/bin')

Was anderes fällt mit so spontan auch nicht ein.

Later,
Orpheus

[ 26. September 2001: Beitrag editiert von: Orpheus ]

Linuxfreak
26-09-2001, 18:15
Hallo,

seltsam, seltsam, bei mir lief es nicht. Ich war auch immer im gleichen Verzeichnis. Mit dem Tipp von micha ging es dann.
Mein Script will nicht. Noch nicht einmal auf einer anderen Linuxkiste lief es.
Sehr sehr seltsam....

Frank :eek: