Ich habe das folgende Skript verwendet, um zu sehen, ob eine Datei existiert:
#!/bin/bash
FILE=$1
if [ -f $FILE ]; then
echo "File $FILE exists."
else
echo "File $FILE does not exist."
fi
Was ist die richtige Syntax, wenn ich nur prüfen will, ob die Datei no existieren?
#!/bin/bash
FILE=$1
if [ $FILE does not exist ]; then
echo "File $FILE does not exist."
fi
226 Stimmen
Ich habe dies gefunden Liste der Bash-Bedingungsanweisungen sehr nützlich.
11 Stimmen
Da ich ein sehr fauler Mensch bin, hätte ich normalerweise die folgende alberne Umgehungskonstruktion verwendet:
if [ -f $FILE ]; then; else; echo "File $FILE does not exist."; fi;
Wahrscheinlich ist es gut, dass ich stattdessen diese Frage gefunden und gelernt habe, wie man es richtig macht :)7 Stimmen
Der Einfachheit halber sollten Sie "reguläre Datei" sagen, da die meisten UNIX/POSIX-Dokumente alle Arten von Dateisystemeinträgen einfach als "Dateien" bezeichnen, z. B. ist ein symbolischer Link eine Art von Datei, ebenso wie eine benannte Pipe, eine reguläre Datei, ein Verzeichnis, ein Block-Special, ein Character-Special, ein Socket usw.
12 Stimmen
@kevinarpe wenn Sie testen wollen, ob etwas existiert, verwenden Sie
-e
. -f erkennt keine Verzeichnisse, Symlinks usw.15 Stimmen
Um sicher zu gehen, verwenden Sie immer doppelte Anführungszeichen, um Dateinamen mit Leerzeichen korrekt zu behandeln, z.B.,
FILE=$1
->FILE="$1"
etif [ -f $FILE ];
->if [ -f "$FILE" ];
0 Stimmen
Leider ist dies anfällig für Race Conditions und in den meisten Anwendungsfällen nicht sinnvoll, abgesehen von trivialen Hallo-Welt-Beispielen.
1 Stimmen
Als Randbemerkung und in Bezug auf Ihre Variable "$FILE": Konventionell werden Umgebungsvariablen (PATH, EDITOR, SHELL, ...) und interne Shell-Variablen (BASH_VERSION, RANDOM, ...) großgeschrieben. Alle anderen Variablennamen sollten klein geschrieben werden. Da bei Variablennamen zwischen Groß- und Kleinschreibung unterschieden wird, verhindert diese Konvention, dass Umgebungsvariablen und interne Variablen versehentlich überschrieben werden.
0 Stimmen
Mögliches Duplikat von Bash: Wie prüfe ich, ob bestimmte Dateien existieren?
3 Stimmen
@jww Dies ist das Gegenteil dieser Frage. Hier wird nach einer bestimmten Syntax gefragt.