Android

So prüfen Sie, ob in bash eine Datei oder ein Verzeichnis vorhanden ist

Shopware Livestream #1: Theme Entwicklung

Shopware Livestream #1: Theme Entwicklung

Inhaltsverzeichnis:

Anonim

Beim Schreiben von Shell-Skripten kommt es häufig vor, dass Sie eine Aktion ausführen müssen, die davon abhängt, ob eine Datei vorhanden ist oder nicht.

In Bash können Sie mit dem Befehl test prüfen, ob eine Datei vorhanden ist, und den Dateityp bestimmen.

Der Testbefehl hat eine der folgenden Syntaxformen:

test EXPRESSION]

Überprüfen Sie, ob die Datei vorhanden ist

Bei der Überprüfung, ob eine Datei vorhanden ist, werden am häufigsten die Operatoren -e und -f . Die erste prüft, ob eine Datei unabhängig vom Typ vorhanden ist, während die zweite nur dann true zurückgibt, wenn es sich bei der DATEI um eine reguläre Datei handelt (kein Verzeichnis oder Gerät).

Die am besten lesbare Option bei der Überprüfung, ob eine Datei vorhanden ist oder nicht, ist die Verwendung des Befehls test in Kombination mit der Anweisung if. In den folgenden Ausschnitten wird überprüft, ob die Datei /etc/resolv.conf vorhanden ist:

FILE=/etc/resolv.conf if test -f "$FILE"; then echo "$FILE exist" fi

FILE=/etc/resolv.conf if; then echo "$FILE exist" fi

FILE=/etc/resolv.conf if]; then echo "$FILE exist" fi

Wenn Sie eine andere Aktion ausführen möchten, die davon abhängt, ob die Datei vorhanden ist oder nicht, verwenden Sie einfach das Konstrukt if / then:

FILE=/etc/resolv.conf if; then echo "$FILE exist" else echo "$FILE does not exist" fi Verwenden Sie immer doppelte Anführungszeichen, um Probleme beim Umgang mit Dateien zu vermeiden, deren Namen Leerzeichen enthalten.

Sie können den Befehl test auch ohne die Anweisung if verwenden. Der Befehl nach dem Operator && wird nur ausgeführt, wenn der Beendigungsstatus des Testbefehls wahr ist.

test -f /etc/resolv.conf && echo "$FILE exist"

&& echo "$FILE exist"

] && echo "$FILE exist"

&& { echo "$FILE exist"; cp "$FILE" /tmp/; }

Im Gegensatz zu && steht die Anweisung nach dem || Der Operator wird nur ausgeführt, wenn der Beendigungsstatus des Testbefehls false .

&& echo "$FILE exist" || echo "$FILE does not exist"

Überprüfen Sie, ob das Verzeichnis vorhanden ist

Mit dem Operator -d können Sie testen, ob eine Datei ein Verzeichnis ist oder nicht.

Um beispielsweise zu überprüfen, ob das Verzeichnis /etc/docker vorhanden ist, würden Sie Folgendes verwenden:

FILE=/etc/docker if; then echo "$FILE is a directory" fi

&& echo "$FILE is a directory"

Sie können auch die doppelten Klammern , 'linuxize_com-medrectangle-4', 'ezslot_7', 160, '0', '0']));

Überprüfen Sie, ob die Datei nicht vorhanden ist

Ähnlich wie in vielen anderen Sprachen kann der Testausdruck mit ! Negiert werden ! (Ausrufezeichen) logisch nicht Operator:

FILE=/etc/docker if; then echo "$FILE does not exist" fi

Das gleiche wie oben:

&& echo "$FILE does not exist"

Überprüfen Sie, ob mehrere Dateien vorhanden sind

Anstatt komplizierte verschachtelte if / else-Konstrukte zu verwenden, können Sie -a (oder && with ; then echo "$FILE is a directory" fi verwenden. -a Sie ; then echo "$FILE is a directory" fi

FILE=/etc/docker if; then echo "$FILE is a directory" fi

Äquivalente Varianten ohne Verwendung der IF-Anweisung:

&& echo "both files exist"

] && echo "both files exist"

Dateitest-Operatoren

Der Befehl test enthält die folgenden FILE-Operatoren, mit denen Sie bestimmte Dateitypen testen können:

  • -b FILE - True, wenn die DATEI existiert und eine spezielle Blockdatei ist. -c FILE - True, wenn die DATEI existiert und eine Sonderzeichendatei ist. -d FILE - True, wenn die DATEI existiert und ein Verzeichnis ist. -e FILE - True, wenn die DATEI existiert und eine Datei ist, unabhängig vom Typ (Knoten, Verzeichnis, Socket usw.). -f FILE - True, wenn die DATEI existiert und eine reguläre Datei ist (kein Verzeichnis oder Gerät). -G FILE - True, wenn die DATEI existiert und dieselbe Gruppe wie der Benutzer hat, der den Befehl ausführt. -h FILE - True, wenn die DATEI existiert und eine symbolische Verknüpfung ist. -g FILE - True, wenn die DATEI existiert und das Flag set-group-id (sgid) gesetzt ist. -k FILE - True, wenn die DATEI existiert und ein Sticky-Bit-Flag gesetzt ist. -L FILE - True, wenn die DATEI existiert und eine symbolische Verknüpfung ist. -O FILE - True, wenn die DATEI vorhanden ist und dem Benutzer gehört, der den Befehl ausführt. -p FILE - True, wenn die DATEI existiert und eine Pipe ist. -r FILE - True, wenn die DATEI existiert und lesbar ist. -S FILE - True, wenn die DATEI existiert und ein Socket ist. -s FILE - True, wenn die DATEI vorhanden ist und eine Größe ungleich Null hat. -u FILE - TRUE, wenn das Flag EXISTENT und SET-BENUTZER-ID (SUID) gesetzt ist. -w FILE - True, wenn die DATEI existiert und beschreibbar ist. -x FILE - True, wenn die DATEI existiert und ausführbar ist.

Fazit

In diesem Handbuch haben wir Ihnen gezeigt, wie Sie mithilfe von Bash überprüfen können, ob eine Datei oder ein Verzeichnis vorhanden ist.

Bash-Terminal