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. |