logo

Überprüfen Sie per Bash, ob die Datei vorhanden ist

In den meisten Fällen kommt es vor, dass wir eine Aktion ausführen müssen, um zu prüfen, ob eine Datei vorhanden ist oder nicht.

In Bash können wir einen „Testbefehl“ verwenden, um zu prüfen, ob eine Datei existiert, und um den Typ einer Datei zu bestimmen.

Im Folgenden finden Sie die Syntax des Testbefehls. Wir können jeden dieser Befehle verwenden:

 test expression [ expression ] [[ expression ]] 

Wir müssen einen einzelnen Klammerbefehl „[“ verwenden, um unser Skript für alle POSIX-Shells portierbar zu machen. Die aktualisierte Version des Testbefehls enthält doppelte Klammern „[[“, was auf den meisten modernen Systemen unterstützt wird, die Bash, Zsh und Ksh als Standard-Shell verwenden.

Überprüfen Sie, ob die Datei vorhanden ist

Bei der Prüfung, ob eine Datei vorhanden ist, sind die am häufigsten verwendeten Dateioperatoren -e und -f. Die Option „-e“ wird verwendet, um zu prüfen, ob eine Datei unabhängig vom Typ existiert, während die Option „-f“ nur dann verwendet wird, um einen wahren Wert zurückzugeben, wenn es sich bei der Datei um eine reguläre Datei handelt (kein Verzeichnis oder ein Gerät).

Die gebräuchlichste Option, um zu überprüfen, ob die Datei existiert oder nicht, ist die Verwendung des Testbefehls mit der „if-Bedingungsanweisung“.

Im Folgenden finden Sie Beispiele, um zu überprüfen, ob die Datei „read_file.txt“ vorhanden ist:

Methode 1

 #!/bin/bash File=read_file.txt if test -f '$File'; then echo '$File exist ' fi 

Methode 2

 #!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist ' fi 

Methode 3

 #!/bin/bash File=read_file.txt if [[ -f '$File' ]]; then echo '$File exist ' fi 

Ausgabe

Die Ausgabe für alle drei Methoden sieht wie folgt aus, da im Verzeichnis eine Datei (read_file.txt) vorhanden ist:

Java-Listenzeichenfolge
 read_file.txt exist 

Wenn wir eine Aktion ausführen möchten, die ein Ergebnis liefert, das davon abhängt, ob die Datei existiert oder nicht, können wir das Wenn/Dann-Konstrukt wie folgt verwenden:

Beispiel

 #!/bin/bash File=read_file.txt if [ -f '$File' ]; then echo '$File exist' else echo '$File does not exist' fi 

Ausgabe

 read_file.txt exist 

Wir können den Testbefehl auch ohne die if-Anweisung verwenden. Wir können eine der folgenden Methoden verwenden:

Methode 1

 #!/bin/bash File=read_file.txt test -f read_file.txt && echo '$File exist' 

Methode 2

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' 

Methode 3

 #!/bin/bash File=read_file.txt [[ -f read_file.txt ]] && echo '$File exist' 

Ausgabe

Die Ausgabe für alle drei Methoden sieht wie folgt aus, da im Verzeichnis eine Datei (read_file.txt) vorhanden ist:

 read_file.txt exist 

Wenn nach dem &&-Operator mehrere Befehle ausgeführt werden müssen, schließen Sie die Befehle in geschweifte Klammern ein, getrennt durch Semikolon (;) oder UND (&&), d. h.:

Beispiel

 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && { echo '$File exist'; echo 'Task Completed'; } 

Im Gegensatz zu && ist die Anweisung nach dem || Der Operator wird nur ausgeführt, wenn der Exit-Status des Testbefehls „false“ ist.

Beispiel

Alter von Pete Davidson
 #!/bin/bash File=read_file.txt [ -f read_file.txt ] && echo '$File exist' || echo '$File does not exist' 

Ausgabe

 read_file.txt exist 

Dies sind die in Bash häufig verwendeten Methoden, um zu überprüfen, ob die Datei vorhanden ist oder nicht.

Überprüfen Sie, ob das Verzeichnis vorhanden ist

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

Im Folgenden finden Sie die Methoden, um zu überprüfen, ob das Verzeichnis „Javatpoint“ vorhanden ist:

Methode 1

 #!/bin/bash File=Javatpoint if [ -d '$File' ]; then echo '$File is a directory' fi 

Methode 2

 #!/bin/bash File=Javatpoint [ -d '$File' ] && echo '$File is a directory' 

Notiz:Wir können auch doppelte Klammern „[[“ anstelle einer einzelnen Klammer „[“ verwenden.

Ausgabe

Die Ausgabe für beide oben genannten Methoden sieht wie folgt aus, da am angegebenen Speicherort ein Verzeichnis (mit dem Namen Javatpoint) vorhanden ist:

 Javatpoint is a directory 

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

Der Testausdruck kann durch Verwendung des Ausrufezeichens (! -logischer NOT-Operator) negiert werden. Schauen Sie sich das folgende Beispiel an:

Beispiel

 #!/bin/bash File=missing_read_file.txt if [ ! -f '$File' ]; then echo '$File does not exist' fi 

Das obige Skript kann auch wie folgt geschrieben werden:

 #!/bin/bash File=missing_read_file.txt [ ! -f '$File' ] && echo '$File unavailable' 

Ausgabe

 missing_read_file.txt unavailable 

Dateitestoperatoren

Die Testbefehle umfassen die folgenden Dateioperatoren, die es uns ermöglichen, bestimmte Dateitypen zu testen:

-b Dateirückgaben „True“, wenn die DATEI als spezielle Blockdatei vorhanden ist.
-c Dateirückgaben „True“, wenn die DATEI als Sonderzeichendatei existiert.
-d Dateirückgaben „True“, wenn die DATEI als Verzeichnis existiert.
-e Dateirückgaben „True“, wenn die DATEI als Datei existiert, unabhängig vom Typ (Knoten, Verzeichnis, Socket usw.).
-f Dateirückgaben „True“, wenn die DATEI als reguläre Datei existiert (kein Verzeichnis oder Gerät).
-G Dateirückgaben „True“, wenn die DATEI vorhanden ist und dieselbe Gruppe enthält wie der Benutzer, der den Befehl ausführt.
-h Dateirückgaben „True“, wenn die DATEI als symbolischer Link vorhanden ist.
-g Dateirückgaben „True“, wenn die DATEI vorhanden ist und das Set-Group-ID-Flag (SGID) enthält.
-k Dateirückgaben „True“, wenn die DATEI vorhanden ist und ein Sticky-Bit-Flag enthält.
-L Dateirückgaben „True“, wenn die DATEI als symbolischer Link vorhanden ist.
-O Dateirückgaben „True“, wenn die DATEI vorhanden ist und dem Benutzer gehört, der den Befehl ausführt.
-p Dateirückgaben „True“, wenn die DATEI als Pipe existiert.
-r Dateirückgaben „True“, wenn die DATEI als lesbare Datei vorhanden ist.
-S Dateirückgaben „True“, wenn die DATEI als Socket vorhanden ist.
-s Dateirückgaben „True“, wenn die DATEI vorhanden ist und eine Größe ungleich Null hat.
-u Dateirückgaben „True“, wenn die DATEI vorhanden ist und das Set-User-ID-Flag (suid) gesetzt ist.
-w Dateirückgaben „True“, wenn die DATEI als beschreibbare Datei vorhanden ist.
-x Dateirückgaben „True“, wenn die DATEI als ausführbare Datei vorhanden ist.