Überprüfen, ob eine Datei oder ein Verzeichnis aus einem Bash-Skript vorhanden ist
Bash wird verwendet, um regelmäßig ausgeführte Befehle in Linux zu automatisieren. Befehle, die für Operationen an Dateien/Verzeichnissen gedacht sind, werden ziemlich häufig verwendet, und normalerweise müssen wir vor der Ausführung eines solchen Befehls überprüfen, ob die bestimmte Datei oder das jeweilige Verzeichnis existiert. Sehen wir uns an, wie Sie diese Prüfung durchführen.
Syntax und Verwendung
Dateien
Verwenden Sie die folgende Syntax, um zu überprüfen, ob eine Datei vorhanden ist:
[ -f ]
Der Ausdruck [ -f ]
gibt 0 zurück, dh Erfolg, wenn existiert, und wenn er nicht existiert, gibt er einen Status ungleich null zurück. Normalerweise wird dies als Bedingung in der if
Anweisung verwendet.
if [ -f ]
then
fi
Um den zurückgegebenen Wert zu negieren , stellen Sie einfach -f
einen Negationsoperator ( !
) voran .
if [ ! -f ]
then
fi
In diesem Fall wird die Bedingung erfüllt, wenn die Datei nicht existiert , da der zurückgegebene Nicht-Null-Status (false) negiert und als 0 (wahr) betrachtet wird.
Beachten Sie, dass der vollständige Pfad der Datei anstelle des Dateinamens angegeben werden sollte, wenn die zu überprüfende Datei nicht im aktuellen Verzeichnis und in einem anderen Verzeichnis vorhanden ist.
Verzeichnisse
Eine ähnliche Syntax wie beim Prüfen von Dateien wird zum Prüfen von Verzeichnissen verwendet.
[ -d ]
Ähnlich der Anweisung für Dateien gibt diese Anweisung 0 zurück, dh Erfolg, wenn das Verzeichnis existiert, und ungleich Null, dh Fehlerstatus wird zurückgegeben, wenn es nicht existiert. Dies wird auch häufig in einer if
Anweisungsbedingung verwendet.
if [ -d ]
then
fi
Um den zurückgegebenen Status zu negieren, stellen Sie dem -d
einen Negationsoperator ( !
) voran .
if [ ! -d ]
then
fi
Die Bedingung erfüllt (Status 0) in diesem Fall, wenn das Verzeichnis nicht existiert, und schlägt fehl (Status ungleich Null), wenn das Verzeichnis existiert.
Wie bereits bei Dateien erwähnt, muss, wenn das zu prüfende Verzeichnis an einem anderen Ort und nicht im aktuellen Verzeichnis existiert, der gesamte Verzeichnispfad anstelle des Verzeichnisnamens eingegeben werden.
💡 Die hier verwendete Klammersyntax ( [...]
) ist eigentlich ein Linux-Befehl namens test
. Die Optionen -f
und -d
sind die Funktionen dieses Befehls. Weitere Informationen finden Sie auf der Handbuchseite von test ( man test
).
Aus einem Bash-Skript prüfen
In den obigen Beispielen haben wir die Syntaxen direkt am Terminal verwendet. Wenn die Shell auf eine Schleife oder eine bedingte Anweisung ( if
in unserem Fall) stößt , setzt sie die Eingabeaufforderung fort und lässt den Benutzer den Block eingeben.
Dieselben Syntaxen können innerhalb eines Bash-Skripts verwendet werden.
Das #!/bin/bash
am Anfang gibt an, welcher Interpreter verwendet werden soll, wenn die Datei ausgeführt wird. Obwohl Bash heutzutage die am häufigsten verwendete Shell ist, bevorzugen einige Benutzer Shells wie zsh
, die am Anfang dieser Datei anstelle von bash angegeben werden sollten.
Führen Sie Folgendes aus, um Ausführungsberechtigungen für diese Datei zu erteilen :
chmod +x test.sh
Um die Datei schließlich auszuführen , führen Sie Folgendes aus:
./test.sh