Shell-Skript mit einer for-Schleife erstellen
In diesem Schritt erstellen Sie ein Shell-Skript, das eine for-Schleife verwendet, um eine Liste von Dateien in einem Verzeichnis zu durchlaufen und eine Operation an jeder Datei durchzuführen. Dieses Skript verdeutlicht, wie man mehrere Dateien dynamisch verarbeitet – eine Standardaufgabe im Bereich Shell-Scripting.
Aufgaben
- Erstellen Sie ein Shell-Skript, das mittels einer
for-Schleife alle Dateien in einem angegebenen Verzeichnis durchläuft.
- Für jede gefundene Datei soll das Skript den Dateinamen und den Inhalt der Datei ausgeben.
Anforderungen
- Das Skript muss den Namen
list_files.sh tragen.
- Das Skript muss im Verzeichnis
~/project gespeichert werden.
- Das Skript muss mit der Shebang-Zeile
#!/bin/bash beginnen.
- Das Skript muss einen Verzeichnispfad als erstes Befehlszeilenargument akzeptieren.
- Das Skript muss eine
for-Schleife verwenden, um die Dateien im angegebenen Verzeichnis zu iterieren.
- Bei jeder regulären Datei muss das Skript "File: " gefolgt vom reinen Dateinamen (Base Name) ausgeben und anschließend den gesamten Inhalt der Datei anzeigen.
- Wenn kein Verzeichnisargument übergeben wird, soll das Skript eine Bedienungsanleitung (Usage Message) ausgeben und mit einem Statuscode ungleich Null beendet werden.
Beispiel
Angenommen, Sie haben das Skript list_files.sh in ~/project erstellt und ausführbar gemacht. Wenn Sie es mit ~/project als Argument aufrufen, sollte die Ausgabe etwa so aussehen:
[labex@host ~]$ cd ~/project
[labex@host project]$ chmod +x list_files.sh
[labex@host project]$ ./list_files.sh ~/project
File: file1.txt
Content of file1.txt
File: file2.txt
Content of file2.txt
File: file3.txt
Content of file3.txt
[labex@host project]$
Wenn Sie das Skript ohne Argumente ausführen, sollte ein Hinweis zur Verwendung erscheinen:
[labex@host project]$ ./list_files.sh
Usage: ./list_files.sh <directory_path>
[labex@host project]$ echo $?
1
[labex@host project]$
Der exakte Inhalt der Dateien hängt natürlich davon ab, was Sie zuvor in diese Dateien geschrieben haben.
Hinweise
- Sie können die Spezialvariable
$1 verwenden, um auf das erste an das Skript übergebene Argument zuzugreifen.
- Um Dateien in einem Verzeichnis zu durchlaufen, können Sie ein Wildcard-Muster wie
"$1"/* nutzen.
- Verwenden Sie eine
if-Anweisung mit dem Operator -f (z. B. if [ -f "$file" ]), um zu prüfen, ob es sich um eine reguläre Datei und nicht um ein Verzeichnis handelt.
- Der Befehl
basename ist hilfreich, um nur den Dateinamen aus einem vollständigen Pfad zu extrahieren. Beispielsweise gibt basename /home/labex/project/file1.txt den Wert file1.txt zurück.
- Mit dem Befehl
cat kann der Inhalt einer Datei angezeigt werden.
- Denken Sie daran, das Skript mit
chmod +x ausführbar zu machen.
- Um zu prüfen, ob eine Variable leer ist, können Sie
if [ -z "$variable" ] verwenden.
- Um ein Skript mit einem bestimmten Statuscode zu beenden, nutzen Sie
exit <status_code>.