Archiv verlassen und diese Seite im Standarddesign anzeigen : Unix, Script, If then Else => immer False
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 ;)
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;
Powered by vBulletin® Version 4.2.5 Copyright ©2024 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.