PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Shell Script "Leere Datei"



dE_MaStEr
26.04.05, 14:17
Hallo,
kann mir jemand sagen warum dieses Shell Script nicht funktioniert?


#Das ist ein Shell Skript, welches Dateien nach einem bestimmten Muster durchsucht!
#./test.sh Datei Suchbegriff

grep -l $2 $1>erg

# Danach soll es ausgeben ob die Datei OK war oder nicht!

if [ [-e]=erg ]
then (cat erg)

else (echo"FEHLER!");

fi

rm erg


Gruss Michael

pibi
26.04.05, 14:43
kann mir jemand sagen warum dieses Shell Script nicht funktioniert?Was GENAU funktioniert denn nicht? Ich wuerde das zB. als Einzeiler schreiben, etwa so:
grep $2 $1 && echo OK || echo not foundAnsonsten musst Du den Errorlevel von grep abfragen und nicht, ob es ein File erzeugt hat. Das macht er naemlich immer;-)

Gruss Pit.

stefan-tiger
26.04.05, 15:13
Erstmal würde ich dir raten Scripte&Programme nicht "test" zu nennen, denn es gibt schon ein Programm daß so heisst:



bash-2.05b$ whereis test
test: /usr/bin/test /usr/X11R6/bin/test /usr/bin/X11/test
/usr/man/man1/test.1.gz /usr/man/man1p/test.1p.gz
/usr/share/man/man1/test.1.gz /usr/share/man/man1p/test.1p.gz

Deswegen hatt bei mir auch schonmal ein "test"-cronjob net funktioniert ;)

tictactux
26.04.05, 16:27
Hi,
wo hast Du denn die ganzen Klammerungen her?
Da steckten eine Menge syntaktische und logische Fehler drin (z.B. bei [-e ]).

Die runden Klammern haben in der Shell eine eigene Bedeutung (subshell), und
werden nicht, wie in manchen Programmiersprachen, z.B. zum Regeln der
Auswertungspriorität benutzt (ich vermute mal, dies sei die Ursache;)).

Lies die manpage von bash für die Syntax des eingebauten test-Operators
(eckige Klammer).
Um zu testen, ob eine Datei existiert und nicht leer
ist gibt es -n:

if [ -n erg ]; then
cat erg
else
echo"FEHLER!"
fi
[ -f erg ] && rm erg
ist übersichtlicher, wenn auch nicht so "schön" wie pibi's Einzeiler:)

Gruss,
Wolfgang

sauron47
20.05.05, 12:43
statt if [ -n erg ] würde ich [ -s erg ] nehmen. das ist nur wahr wenn die datei existiert und nicht leer ist!