Aufzucht und Hege von Shell-Scripts: Schleifen

Welche Schleifen sind für die Eingabeverarbeitung geeignet?

Eigentlich gar keine ;-) Was ich damit meine: Bevor Ihr anfangt, eine Datei oder eine längere Kommandoausgabe in einer Schleife verwurschteln zu wollen, schaut lieber bei den Kommandos nach, die für solche Zwecke extra gebaut wurden. Das wären insbesondere sed, awk, grep, cut, tr und viele viele mehr. Damit werdet Ihr fast immer schneller und ressourcenschonender ans Ziel kommen. So, und jetzt zum Thema:

Es gibt 2 Grundformen, das sind for und while. Beide unterscheiden sich in der Art und Weise, wie sie angewendet werden und haben ihre Vor- und Nachteile:

Die for-Schleife:

  # for-Schleife, verarbeitet die Ausgabe eines Kommandos (kann auch cat datei sein)
  # Vorteil: Keine Pipe und damit keine Subshell
  # Nachteil: Kommt nicht mit Leerzeichen, Tabs usw. klar
  for VAR in `irgendein_kommando`; do
    ...
  done
  # andere Variante mit Umsetzen des Input Field Separator (IFS)
  # Vorteil: jetzt mit Unterstuetzung von Leerzeichen usw.
  # Nachteil: IFS muss anschliessend restauriert werden
  OLD_IFS="$IFS"
  IFS='
  '
  for VAR in `irgendein_kommando`; do
    ...
  done
  IFS="$OLD_IFS"

Die while-Schleife (die Anmerkungen gelten auch für until, hier wird nur die Abbruchbedingung anders definiert):

  # while-Schleife, verarbeitet alles, was per stdin reinkommt
  # Vorteil: kann beliebige Eingaben aufnehmen
  # Nachteil: Pipe und damit Subshell
  irgendein_kommando | while read x [y ...]; do
    ...
  done
  # Andere Variante: Fuetterung ueber Eingabeumleitung
  # Vorteil: keine Pipe mehr
  # Nachteil: nur Input aus Dateien moeglich
  while read x [y ...]; do
    ...
  done <datei