So bevor ich jetzt total verzweifel weil ich mit Google 10000 Seiten finde wie ich abfrage ob eine Datei existiert, aber kein Beispiel wie ich abfrage dass sie nicht existiert und versuche mit ! und ~ erfolglos waren, wie schreibe ich es besser? if [ -f DATEINAME ]; then #useless command to satisfy bash echo "" else echo "please compile before testing" exit 1 fi
Hm, das Ausrufezeichen tut's nicht?
1 | if ![ -f DATEINAME ]; then |
Hm, ich meine das auch schon mal anders syntaxisiert zu haben :) Hab aber leider grad kein Linux zum Testen da.
[...] steht für das interne Kommando test. Wenn man mit der bash arbeitet: - Es kommt das Ausrufezeichen zumindest in die eckigen Klammern, weil es den darin enthaltenen logischen Ausdruck negieren soll. - das Quoten mit \ ist nötig, um eine Sonderbehandlung zu vermeiden. Falls es um die sh geht: Ein Quoten ist vrmtl. nicht nötig; ob es geht das ! ausserhalb stehen zu lassen weiß ich nicht. Mit if [ \! -f ...] geht es jedenfalls mit sh und bash.
Mark Brandis schrieb: > Hm, das Ausrufezeichen tut's nicht? > >
1 | > if ![ -f DATEINAME ]; then |
2 | > |
ich habe es eben mit sh probiert; da scheint es zu gehen, wenn man noch ein Leerzeichen nach dem ! spendiert.
Danke. Ans Quoten bei dem Ausrufezeichen hatte ich nicht gedacht.
Erwähnenswert wäre vielleicht noch, dass "! -f" möglicherweise nicht das ist, was du haben möchtest. Wenn z.B. ein Directory mit dem Namen existiert, ist diese Bedingung auch true. Vermutlich möchtest du eher ein "! -e" haben.
gerade umgekehrt: -f reagiert auf reguläre Datei, -e auf alles
Klaus Wachtler schrieb:
> gerade umgekehrt: -f reagiert auf reguläre Datei, -e auf alles
Wieso umgekehrt? Genau das habe ich doch geschrieben.
"! -f" ist für ein Directory (und noch für Diverses andere) true. In der
Regel geht es aber darum, festzustellen, ob überhaupt noch nichts mit
dem Namen existiert (quasi ob der Name noch frei ist), also "! -e".
oh sorry, jetzt hatte ich in deinem Post das ! übergangen (und gelesen, -f wäre bei einem Verzeichnis true); ich nehme alles zurück.
Noch etwas zu
1 | if ! [ -f DATEINAME ]; then |
Ohne das Leerzeichen wird das Ausrufezeichen als Event-Designator interpretiert. Steht das ! durch Leerraum getrennt vor einem Befehl, wird dessen Rückgabestatus negiert, in diesem Fall also der des [-Befehls. Das ! ist in diesem Kontext der zu && und || passende Negationsoperator. Das ! innerhalb von [ ] ist, wie auch -a (and) und -o (or), ein mögliches Argument des test- bspw [-Befehls und hat mit dem obigen ! nichts zu tun.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.