WHILE loop


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

  1. Loop med två variabler
  2. Loop med if-sats inuti
  3. Loop med strängar
  4. Lösenordsgenerator
  5. 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.