PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Unix, Script, If then Else => immer False



jerome
26-08-2004, 09:52
Ich Versuche ein Script zu erstellen, welches ein File (Menge der Zeilen) überprüft, und falls das File nicht die gewünschte Zeilenmenge hat eine bestimmte Aktion ausführt.
Kurz gefasst:
Hat File 3 Zeilen = mach aktion 1
Hat File nicht 3 Zeilen = mach aktion 2
Aber die Überprüfung gibt immer false aus, auch wenn das File 3 Zeilen hat?! Was ist an der Überprüfung falsch bzw. an der If then else? :confused:

Script:
#################################
#!/bin/bash
if [[ 'wc -l < test_mail.log' == "3" ]]
then
echo "File hat 3 Zeilen"
else
echo "File hat nicht 3 Zeilen"
fi
echo "Zeilen des Files:"
wc -l < test_mail.log

undefined
26-08-2004, 10:40
#!/bin/bash
if [ "`wc -l < test_mail.log`" == "3" ];then
echo "File hat 3 Zeilen"
else
echo "File hat nicht 3 Zeilen"
fi
exit;
Alles zwischen ' ' wird wortwörtlich genommen und nicht interpretiert ;)

jerome
26-08-2004, 11:19
if [ "`wc -l < test_mail.log`" == "3" ]
Alles zwischen ' ' wird wortwörtlich genommen und nicht interpretiert ;)
Danke für den Tipp
:confused: Wenn ich den Code so anpasse wie in deinem Posting, erhalte ich weiterhin nur False-Meldungen. Auch wenn ich die ' oder die " entferne will das einfach nicht klappen... :confused:

peschmae
26-08-2004, 12:56
Bei mir funktioniert undefineds code aber. Hast du evtl. nicht die Rechte die Datei zu lesen oder liegt sie in einem anderen Verzeichnis?
Oder hast du die falschen ` erwischt? Am besten kopierst du das einfach rüber.

MfG Peschmä

undefined
26-08-2004, 14:28
Dann hätte er eine andere Fehlermeldung;)
Ich würde mal sagen der Pfad stimmt nicht.

#!/bin/bash
if [ -r "test_mail.log" ];then
if [ "`wc -l < test_mail.log`" == "3" ];then
echo "File hat 3 Zeilen"
else
echo "File hat nicht 3 Zeilen"
fi
else
echo "Error: no File found"
fi
exit;

Hans-Georg Normann
26-08-2004, 20:47
Ich verstehe das nicht ganz. Warum
wc -l < test_mail.log und nicht
wc -l test_mail.log Wo liegt da der Unterschied?
if [ `wc -l test_mail.log` -eq 3 ];then Das würde mir am besten gefallen. Bei numerischen Werten immer mit den Operatoren -lt, -eq, -gt usw arbeiten. Dann braucht man diese unübersichtlichen Tüdelchen nicht :D

So, das waren jetzt aber alle Wünsche für heute.

Hans

peschmae
26-08-2004, 21:28
Der Unterschied zwischen den beiden wc-Varianten ist praktisch irrelevant. Die mit dem < kriegt den Inhalt der Datei über den Stdin angeliefert (wo wc guckt weil es keine Datei als Parameter gekriegt hat) und ohne das < kriegt wc den Dateinamen und liest dann aus der Datei.

MfG Peschmä

undefined
27-08-2004, 09:11
@Hans-Georg Normann
Das hast du voll und ganz recht, ich habe auch nur sein Script übernommen und berichtigt. Selbst würde ich es ohnehin das ganz anders schreiben. ;)
Aber so etwas dürfte meisten mehr verwirren als Helfen. Aber das Zuweisungssymbol ist schon notwendig weil wir ja keien Dateinamen benötigen ;)

#!/bin/bash
FILE=test_mail.log
f=0
if [ ! `wc -l < $FILE` -eq 4 ];then f=1; fi
echo "und weiter gehts mit $FILE und Codes $f"
exit;