Linux Bash: for Schleife. Beispiele und Erklärung.

Anzeige

In diesem Beitrag erfahren Sie, wie eine for Schleife in Linux Bash funktioniert.
Linux Admins verwenden oft die "for Schleife" in Bash Scripts. Insbesondere in den Fällen, wenn eine Menge von Daten nach einem bestimmten Muster bearbeitet werden soll.


Anwendungsbeispiel:
In einem Verzeichnis befinden sich 2000 verschiedene Dateien.
Davon sind 1300 Logs, welche nach einem bestimmten Filter ausgefiltert und in ein anderes Verzeichnis verschoben werden sollen.
Solche Arbeiten manuell durchführen kostet zu viel Zeit.
Eine "for Schleife" könnte in solchen Situationen sehr nützlich sein.


Notwendige Vorkenntnisse:
1) Einen Shell Script erstellen und ausführen
2) Eine Variable in Shell erstellen und auslesen


Beispiel 1: Dateien mit for-Schleife erstellen/generieren

#!/bin/bash

for variable1 in "datei1" "datei2" "datei3" "datei4" "datei5" ; do
    touch "/var/${variable1}"
done


Ergebnis in der Konsole prüfen:

root@test-server:/var# ls -1
datei1
datei2
datei3
datei4
datei5

 

Was macht diese "for Schleife"?

Diese Schleife enthält eine Liste mit Elementen, welche mit Leerzeichen getrennt sind. Die Schleife liest zuerst das erste Element aus und weist ihn der Variable variable1 zu. Dann führt die Schleife alle Befehle durch, welche innerhalb der Schleife angegeben sind.

 

Detaillierter: Was macht die for-Schleife in diesem Beispiel im ersten Durchlauf?


1) Der Variable variable1 wird der Wert “datei1“ zugewiesen:

variable1=“datei1“

2) Danach wird folgender Befehl durchgeführt:

touch /var/datei1

So werden oben beschriebene Schritte mit jedem Element aus der Liste nacheinander durchgeführt, bis alle Elemente bearbeitet sind.

 

Beispiel 2: Dateien mit for Schleife umbenennen

#!/bin/bash

for variable1 in /var/datei* ; do
    mv "$variable1" "${variable1}.log"
done


Ergebnis in der Konsole prüfen:

root@test-server:/var# ls -1
datei1.log
datei2.log
datei3.log
datei4.log
datei5.log


In dieser Schleife passiert folgendes:
Zuerst werden alle Dateien vom Verzeichnis /var/ aufgelistet, welche dem Muster datei* entsprechen (welche Rolle hier das Sternchen * spielt, können Sie z.B. hier nachlesen).

Was macht diese for Schleife in diesem Beispiel konkret?

Erster Durchlauf:
1) Der Variable variable1 wird der Wert “/var/datei1“ zugewiesen:

variable1=“/var/datei1“

2) Danach wird folgender Befehl durchgeführt:

mv /var/datei1 /var/datei1.log

Und das passiert bei den nächsten Durchläufen mit allen weiteren Elementen der Liste (datei2, datei3, etc.).


Beispiel 3: Dateien mit for Schleife kopieren

#!/bin/bash

for variable1 in /var/*.log ; do
    filename1=$(basename "$variable1")
    cp "$variable1" "/var/backup/${filename1}"
done

 

Ergebnis in der Konsole prüfen:

root@test-server:/var/backup# ls -1
datei1.log
datei2.log
datei3.log
datei4.log
datei5.log

 

Hier gibt es eine Besonderheit:
Die Variable "variable1" hat beim ersten Durchlauf den Wert /var/datei1.log
Um diese Datei in das Verzeichnis /var/backup/ zu kopieren, soll folgender Befehl verwendet werden:

cp /var/datei1.log /var/backup/datei1.log

Mit dem Konstrukt filename1=$(basename "$variable1") wird der Variable "filename1" der Datei-Name aus der Variable "variable1" zugewiesen (und zwar datei1.log)

Es gibt noch das Konstrukt dirname1=$(dirname "$variable1")
Damit lässt sich der Pfad aus der Variable "variale1" auslesen und dieser Wert wird der Variable "dirname" zugewiesen (und zwar /var/)

Kommentar veröffentlichen