I tidigare avsnitt gick vi igenom for- och foreach-loopar, som båda används för att repetera kod ett visst antal gånger eller för att bearbeta element i en samling. Nu ska vi titta på en annan typ av loop – while-loopen – som i stället bygger på ett villkor. Medan for och foreach ofta används när man vet hur många gånger koden ska köras, används while-loopar när man inte i förväg vet hur många iterationer som behövs, utan vill fortsätta så länge ett visst logiskt villkor är sant.
En while-loop i PowerShell används för att upprepa ett kodblock så länge ett angivet villkor är sant. Detta ger flexibilitet och kontroll över hur länge processen ska fortsätta.
Syntax:
while ($villkor) {
# Kod att upprepa så länge $villkor är sant
}
Exempel – Räkna från 1 till 5
$counter = 1 while ($counter -le 5) { Write-Host "Count: $counter" $counter++ }
- Utdata:
- Count: 1
- Count: 2
- Count: 3
- Count: 4
- Count: 5
I detta exempel körs koden inuti loopen så länge villkoret $counter -le 5 är sant. När $counter blir 6 upphör loopen.
Exempel på olika varianter av while-loopar
- Loop med två variabler
- Loop med if-sats inuti
- Loop med strängar
- Lösenordsgenerator
- Loop som ger dagens datum rad efter rad
1. Loop med två variabler
$i = 5 $j = 10 while (($i -le 10) -and ($j -ge 7)) { Write-Output "Value of i : $i" Write-Output "`nValue of j : $j" $i++ $j-- }
- Utdata:
- Value of i : 5
- Value of j : 10
- Value of i : 6
- Value of j : 9
- Value of i : 7
- Value of j : 8
- Value of i : 8
- Value of j : 7
Här körs loopen så länge båda villkoren är sanna: $i är mindre än eller lika med 10 och $j är större än eller lika med 7.
2. Loop med if-sats inuti
$i = 5 while ($i -le 10) { if ($i -eq 8) { Write-Output "Variable value reached to 8" } $i++ }
- Utdata:
- Variable value reached to 8
Variabeln $i ökar med 1 för varje iteration tills den når 8, då meddelandet skrivs ut.
3. Loop med strängar
$i = 0 while ($i -ne 4) { $i++ "Värdet är = $i" }
- Utdata:
- Värdet är = 1
- Värdet är = 2
- Värdet är = 3
- Värdet är = 4
- Förklaring:
- Loopen körs så länge $i inte är lika med 4. Vid varje iteration ökas $i med 1 och värdet skrivs ut.
4. Lösenordsgenerator
$length = 10 $chars = "ABCDEFGHIJKLMNOPQRSTUVWabcdefghijklmnopqrstuvw012345!@#$%^()+" $i = 0 $password = "" while ($i -lt $length) { $index = Get-Random -Minimum 0 -Maximum $chars.Length $password += $chars[$index] $i++ } Write-Host "Your password is: $password"
- Utdata (exempel):
- Your password is: w$g2RRM0wN
- Här används loopen för att skapa ett slumpmässigt lösenord med angiven längd.
5. Loop som ger dagens datum rad efter rad
$i=1; while ($true) { Write-Host "$i - $(Get-Date)"; $i++; Start-Sleep 1 }
Ctrl + c för att avbryta processen.
DO WHILE
En do while-loop fungerar nästan likadant som en vanlig while-loop, men med en viktig skillnad:
Koden inuti loopen körs minst en gång, även om villkoret är falskt från början.
Syntax:
do { # Kod att upprepa minst en gång } while ($villkor)
Exempel
1. Räkna till 5
$val = 0 do { $val++ Write-Host $val } while ($val -ne 5)
- Utdata:
- 1
- 2
- 3
- 4
- 5
2. Fråga efter användarens input
$input = "" do { $input = Read-Host "Ange något tecken (sluta med 'exit'):" Write-Host "Du angav: $input" } while ($input -ne 'exit')
- Här fortsätter loopen tills användaren skriver exit.
3. Gissa ett nummer mellan 1 och 10
$randomNumber = Get-Random -Minimum 1 -Maximum 10 $guess = 0 do { $guess = Read-Host "Gissa ett nummer mellan 1 och 10" } while ($guess -ne $randomNumber) Write-Host "Grattis! Du gissade rätt."
- Loopen körs om och om igen tills användaren gissar rätt nummer.
4. Ange ditt lösenord
$attempts = 3 do { $password = Read-Host "Ange lösenord" $attempts-- } while (($password -ne 'hemligt') -and ($attempts -gt 0)) Write-Host "Har du glömt ditt lösenord?"
- Loopen tillåter tre försök innan den avslutas.
Skillnaden mellan WHILE och DO WHILE
Som nämnts tidigare ligger skillnaden i när villkoret kontrolleras.
I en while-loop kontrolleras villkoret innan första körningen, medan do while kontrollerar efteråt. Låt oss se skillnaden i praktiken:
While-loop:
$i = 11 while ($i -lt 10) { $i $i++ }
- Loopen körs inte alls, eftersom villkoret inte är sant från början.
Do While-loop:
$i = 11 do { $i $i++ } while ($i -lt 10)
- Loopen körs en gång, även om villkoret är falskt. Efter körningen har $i ökat till 12.