Die FOR-Schleife
Im ersten Teil haben wir uns mit einem Telefonbuch beschäftigt. Und mit ein paar Befehlen es auch ausgewertet. Heute wollen wir dieses Telefonbuch in Schleifen bearbeiten. Ja die shell kann mehrere Arten von Schleifen, die FOR und die WHILE/UNTIL Schleifen. Der Unterschied liegt u.a. im minimalen Durchlauf.
Bleiben wir zunächst bei der FOR-Schleife. Die For-Schleife hat jetzt folgenden Aufbau. Das Keywort „for“ und dann die Variable und eine Liste. Und jetzt haben wir den ersten Unterschied in den diversen shells. In der bash wäre jetzt auch eine Bedingung und ein Zähler möglich (C Syntax). Heute wollen wir noch nichts damit machen, wir begnügen uns mit einer Liste und dem zweiten Keywort „in“. Dann kommen die Keywörter „do“ und „done“, die die Schleife starten bzw. beenden.
for VARIABLE in LISTE
do
befehl …
..
..
done
Wenn wir unser Telefonbuch Zeile für Zeile ansehen wollen, dann können wir das mit einer Schleife machen. Dazu muss ich noch etwas erklären. In der shell kann ich Sub-Prozesse starten, die mir das Ergebnis (Liste) in meine Hauptshell liefern. Solche Sub-Shells werden mit dem Zeichen ` (Accent grave) eingeschlossen.
for ZEILE in `cat telefonbuch.txt `
do
echo "$ZEILE"
done
Tabs, Blanks(Leertaste) und NewLine
Da sind die leidlichen Zeichen die das scripten so schwer machen. Diese 3 Zeichen trennen eine Liste von Haus aus in einzelne Felder auf. Will ich das? Jein. Es ist ganz praktisch, wenn ich Daten ohne Blank habe, Wenn ich in einem Feld allerdings Vor und Nachname speichere, dann würde mir der Datensatz getrennt werden. Bei 2 Vornamen dann hätte ich eine doppelte Trennung.
Gott sei Dank gibt es die Variable IFS. Wenn ich die Variable jetzt mit „nichts“ belege, dann erfolgt keine Trennung mehr bei Blank und Tab.
Das mache ich durch das Kommando
IFS=““
Wenn ich vorher noch export IFS=“ schreibe dann gilt das auch für alle weiteren Subshells. Beim ausloggen und neuem Anmelden habe ich wieder meine default Werte. Oder schneller geht es, wenn ich ein unset IFS durchführe und die Variable aus meinem Speicher lösche.
Um den Unterschied merkbar zu machen, setzen wir IFS=“;“ also den Strichpunkt als Trennzeichen .
Wenn wir jetzt den Befehle nochmals ausführen bekommen wir jedes einzelne Feld als eigene Zeile angezeigt. unset IFS setzt alles wieder auf default.

Noch keine Reaktion