Beim Schreiben von Shell-Skripten befinden Sie sich häufig in einer Situation, in der Sie eine Aktion ausführen müssen, die darauf basiert, ob eine Datei vorhanden ist oder nicht
In Bash können Sie mit dem Testbefehl prüfen, ob eine Datei vorhanden ist, und den Dateityp bestimmen.
Der Testbefehl hat eine der folgenden Syntaxformen:
Wenn Ihr Skript portabel sein soll, sollten Sie lieber den alten Test ; then echo "$FILE exists."fi
Wenn Sie eine andere Aktion ausführen möchten, je nachdem, ob die Datei vorhanden ist oder nicht Verwenden Sie das if / then-Konstrukt:
Sie können den Testbefehl auch ohne die if-Anweisung verwenden. Der Befehl nach dem Operator &&
wird nur ausgeführt, wenn der Beendigungsstatus des Testbefehls true ist.
Wenn Sie möchten Führen Sie eine Reihe von Befehlen aus, nachdem der Operator &&
die Befehle einfach in geschweifte Klammern eingeschlossen hat, die durch ;
oder &&
:
Im Gegensatz zu &&
steht die Anweisung nach dem Der Operator ||
wird nur ausgeführt, wenn der Exit-Status des Testbefehls false
lautet.
Überprüfen Sie, ob das Verzeichnis vorhanden ist #
Mit den Operatoren -d
können Sie testen, ob eine Datei eine ist Verzeichnis oder nicht.
Um beispielsweise zu überprüfen, ob das Verzeichnis /etc/docker
vorhanden ist, würden Sie Folgendes verwenden:
Sie können auch die doppelten Klammern ; then echo "$FILE does not exist."fi
Wie oben:
Überprüfen Sie, ob mehrere Dateien vorhanden sind #
Anstatt komplizierte verschachtelte if / else-Konstrukte zu verwenden, können Sie -a
(oder &&
mit
Äquivalente Varianten ohne Verwendung der IF-Anweisung:
Dateitestoperatoren #
Der Befehl test enthält die folgenden FILE-Operatoren, mit denen Sie nach bestimmten Dateitypen testen können:
-
-b
FILE
– True, wenn die DATEI vorhanden ist und eine spezielle Blockdatei ist. -
-c
FILE
– True wenn die DATEI existiert und eine Sonderzeichendatei ist. -
-d
FILE
– True, wenn die DATEI vorhanden ist und ein Verzeichnis ist. -
-e
FILE
– True, wenn die DATEI vorhanden ist und eine Datei ist, unabhängig vom Typ (Knoten, Verzeichnis, Socket usw.). -
-f
FILE
– True, wenn die DATEI vorhanden ist und eine reguläre Datei ist (kein Verzeichnis oder Gerät). -
-G
FILE
– True, wenn die DATEI vorhanden ist und dieselbe Gruppe wie der Benutzer hat, der den Befehl ausführt. -
-h
FILE
– True, wenn die DATEI vorhanden ist und eine symbolische Verknüpfung darstellt. -
-g
FILE
– True, wenn die DATEI vorhanden ist und das Flag set-group-id (sgid
) gesetzt ist. -
-k
FILE
– True, wenn die DATEI vorhanden ist und ein Sticky-Bit-Flag gesetzt ist. -
-L
– True, wenn die DATEI vorhanden ist und eine symbolische Verknüpfung darstellt. -
-O
FILE
– True, wenn die DATEI vorhanden ist und dem Benutzer gehört, der den Befehl ausführt. -
-p
FILE
– True if Die DATEI existiert und ist eine Pipe. -
-r
FILE
– True, wenn die DATEI existiert und lesbar ist. -
-S
FILE
– True, wenn die DATEI vorhanden ist und ein Socket ist. -
-s
FILE
– True, wenn die DATEI vorhanden ist und eine Größe ungleich Null hat. -
-u
FILE
– True, wenn die DATEI vorhanden ist und das Flag set-user-id (suid
) gesetzt ist. -
-w
FILE
– True, wenn die DATEI vorhanden und beschreibbar ist. -
-x
FILE
– True, wenn die DATEI existiert und exe ist schneidbar.
Schlussfolgerung #
In diesem Handbuch haben wir Ihnen gezeigt, wie Sie überprüfen können, ob eine Datei oder ein Verzeichnis in Bash vorhanden ist.