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 nicht existiert?
#!/bin/bash
FILE=$1
if [ $FILE does not exist ]; then
echo "File $FILE does not exist."
fi
Der Befehl test (hier [
) hat einen logischen Operator "not", der ein Ausrufezeichen ist (ähnlich wie in vielen anderen Sprachen). Versuchen Sie dies:
if [ ! -f /tmp/foo.txt ]; then
echo "File not found!"
fi
Sie können einen Ausdruck mit "!" negieren:
#!/bin/bash
FILE=$1
if [ ! -f "$FILE" ]
then
echo "File $FILE does not exist"
fi
Die entsprechende Manpage ist man test
oder, äquivalent, man [
-- oder help test
oder help [
für den eingebauten Bash-Befehl.
[[ -f $FILE ]] || printf '%s does not exist!\n' "$FILE"
Es ist auch möglich, dass die Datei ein defekter symbolischer Link oder eine nicht-reguläre Datei ist, wie z.B. ein Socket, Gerät oder Fifo. Zum Beispiel, um eine Prüfung auf defekte Symlinks hinzuzufügen:
if [[ ! -f $FILE ]]; then
if [[ -L $FILE ]]; then
printf '%s is a broken symlink!\n' "$FILE"
else
printf '%s does not exist!\n' "$FILE"
fi
fi