PowerShell – Schleifen kompakt erklärt
Grundidee
Eine Schleife wiederholt einen Codeblock, solange eine Bedingung erfüllt ist oder bis eine Abbruchbedingung erreicht wird.
Wichtige Schleifentypen
| Schleife | Bedeutung | Prüft wann? | Kann 0-mal laufen? |
|---|---|---|---|
| while | solange eine Bedingung wahr ist | vorher | ja |
| for | Zählschleife mit Start, Bedingung und Änderung | vorher | ja |
| foreach | läuft durch alle Elemente einer Liste | vorher | ja, wenn Liste leer ist |
| do while | läuft mindestens einmal, dann solange Bedingung wahr ist | danach | nein |
| do until | läuft mindestens einmal, dann bis Bedingung wahr wird | danach | nein |
Abweisende Schleifen
Abweisende Schleifen prüfen die Bedingung vor dem ersten Durchlauf.
Sie können deshalb 0-mal laufen.
Beispiele:
while ($x -lt 5) {
}
for ($i = 0; $i -lt 3; $i++) {
}
foreach ($item in $liste) {
}
Nicht-abweisende / fußgesteuerte Schleifen
Diese Schleifen prüfen die Bedingung erst nach dem ersten Durchlauf.
Sie laufen deshalb mindestens 1-mal.
Beispiele:
do {
}
while ($x -lt 5)
do {
}
until ($x -ge 5)
Kopfgesteuert und fußgesteuert
| Begriff | Bedeutung | Beispiele |
|---|---|---|
| kopfgesteuert | Bedingung wird vor dem Schleifenkörper geprüft | while, for, foreach |
| fußgesteuert | Bedingung wird nach dem Schleifenkörper geprüft | do while, do until |
Schleifenkopf
Im Schleifenkopf steht die Bedingung oder Steuerung der Schleife.
Beispiel:
while ($i -lt 5)
Schleifenkörper
Der Schleifenkörper ist der Code, der wiederholt ausgeführt wird.
Beispiel:
{
Write-Host $i
$i++
}
Iteration
Eine Iteration ist ein einzelner Schleifendurchlauf.
Wenn eine Schleife 5-mal läuft, hat sie 5 Iterationen.
Abbruchbedingung
Die Abbruchbedingung beschreibt, wann die Schleife beendet werden soll.
Beispiel:
Abbrechen, sobald $i mindestens 5 ist.
Bei do until steht diese Bedingung direkt in der Schleife:
do {
$i++
}
until ($i -ge 5)
Weiterlaufbedingung
Die Weiterlaufbedingung beschreibt, solange die Schleife weiterlaufen soll.
Beispiel:
while ($i -lt 5)
Bedeutung:
Wiederholen, solange $i kleiner als 5 ist.
while
while prüft vor jedem Durchlauf.
$i = 0
while ($i -lt 3) {
Write-Host $i
$i++
}
Ausgabe:
0
1
2
Warum keine 3?
3 -lt 3 = falsch
do while
do while läuft mindestens einmal und prüft danach.
$x = 10
do {
Write-Host $x
}
while ($x -lt 5)
Ausgabe:
10
Die Schleife läuft nur 1-mal, weil danach geprüft wird:
10 -lt 5 = falsch
do until
do until läuft mindestens einmal und stoppt, sobald die Bedingung wahr ist.
$punkte = 0
do {
$punkte += 10
}
until ($punkte -ge 100)
Bedeutung:
Wiederholen, bis $punkte mindestens 100 ist.
for
for ist eine typische Zählschleife.
Aufbau:
for (Startwert; Bedingung; Veränderung) {
}
Beispiel:
for ($i = 0; $i -lt 3; $i++) {
Write-Host $i
}
Ausgabe:
0
1
2
Ablauf:
| Durchlauf | $i | Prüfung |
|---|---|---|
| 1 | 0 | 0 -lt 3 = wahr |
| 2 | 1 | 1 -lt 3 = wahr |
| 3 | 2 | 2 -lt 3 = wahr |
| Ende | 3 | 3 -lt 3 = falsch |
Leerer Schleifenkörper
Auch wenn der Schleifenkörper leer ist, läuft die Schleife trotzdem.
for ($i = 0; $i -lt 3; $i++) {
}
Diese Schleife läuft 3-mal.
Sie gibt nur nichts aus.
foreach
foreach wird verwendet, um jedes Element einer Liste zu verarbeiten.
foreach ($datei in $dateien) {
Write-Host $datei
}
Bedeutung:
Für jede Datei in $dateien wird der Code einmal ausgeführt.
Wenn die Liste leer ist, läuft foreach 0-mal.
Vergleichsoperatoren in PowerShell
| Operator | Bedeutung |
|---|---|
| -lt | kleiner als |
| -le | kleiner oder gleich |
| -gt | größer als |
| -ge | größer oder gleich |
| -eq | gleich |
| -ne | ungleich |
Beispiele:
$i -lt 5 # kleiner als 5
$i -le 5 # kleiner oder gleich 5
$i -gt 5 # größer als 5
$i -ge 5 # größer oder gleich 5
$i -eq 5 # genau 5
$i -ne 5 # nicht 5
Wichtig: -lt und -le
-lt 5 = kleiner als 5
Läuft bei:
0, 1, 2, 3, 4
Nicht bei:
5
-le 5 = kleiner oder gleich 5
Läuft bei:
0, 1, 2, 3, 4, 5
while vs until
| Schleife | Bedeutung |
|---|---|
| while | läuft solange die Bedingung wahr ist |
| until | läuft bis die Bedingung wahr wird |
Beispiel mit while:
do {
$punkte += 10
}
while ($punkte -lt 100)
Bedeutung:
Wiederholen, solange $punkte kleiner als 100 ist.
Beispiel mit until:
do {
$punkte += 10
}
until ($punkte -ge 100)
Bedeutung:
Wiederholen, bis $punkte mindestens 100 ist.
Bei 100 abbrechen
Wenn bei 100 Schluss sein soll, ist bei do until logisch:
until ($punkte -ge 100)
Oder bei do while:
while ($punkte -lt 100)
Nicht passend wäre:
while ($punkte -le 100)
Denn bei 100 ist diese Bedingung noch wahr und die Schleife läuft nochmal.
Zähler erhöhen
$i++
ist dasselbe wie:
$i += 1
Beide erhöhen den Wert um 1.
Zähler verringern
$i--
ist dasselbe wie:
$i -= 1
Beide verringern den Wert um 1.
Größere Schritte
$i += 5
erhöht um 5.
$i -= 5
verringert um 5.
Initialisierung
Initialisierung bedeutet: Startwert setzen.
Beispiel:
$i = 0
Inkrement
Inkrement bedeutet: Wert erhöhen.
Beispiel:
$i++
oder:
$i += 1
Dekrement
Dekrement bedeutet: Wert verringern.
Beispiel:
$i--
oder:
$i -= 1
Endlosschleife
Eine Endlosschleife endet nicht von selbst.
Beispiel:
while ($true) {
Write-Host "läuft"
}
Oder:
$x = 1
do {
Write-Host $x
}
while ($x -lt 5)
Wenn $x nie verändert wird, bleibt die Bedingung immer wahr.
break
break beendet eine Schleife sofort.
while ($true) {
break
}
continue
continue überspringt den Rest des aktuellen Durchlaufs und springt direkt zum nächsten Durchlauf.
for ($i = 1; $i -le 5; $i++) {
if ($i -eq 3) {
continue
}
Write-Host $i
}
Ausgabe:
1
2
4
5
Off-by-one-Fehler
Ein Off-by-one-Fehler passiert, wenn eine Schleife einmal zu viel oder einmal zu wenig läuft.
Typischer Unterschied:
$i -lt 5
läuft bis 4.
$i -le 5
läuft bis 5.
Merksätze
while = solange
until = bis
for = Zählschleife
foreach = für jedes Element
do while = mindestens einmal, dann solange
do until = mindestens einmal, dann bis
break = sofort raus
continue = nächster Durchlauf
-lt = kleiner als
-le = kleiner oder gleich
-gt = größer als
-ge = größer oder gleich
-eq = gleich
-ne = ungleich