Det finns två typer av while-loopar i PowerShell, var och en med sin egen syntax och användningsfall: while och do while. Låt oss först utforska while-loopen.
WHILE
En while-loop i PowerShell används för att upprepa en block av kod så länge ett angivet villkor är sant. Denna konstruktion gör det möjligt att iterera över koden medan ett specificerat villkor uppfylls, vilket ger flexibilitet och kontroll över upprepade processer.
Syntax för while-loop:
while ($villkor) {
Kod att upprepa så länge $villkor är sant
}
Här är ett exempel där vi använder en while-loop för att räkna från 1 till 5:
- PS C:\>$counter = 1
- PS C:\>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. Detta möjliggör upprepning av koden och ger oss kontroll över antalet iterationer/repetitioner.
Fler exempel:
- Loop med två variabler:
- PS C:\>$i=5
- PS C:\>$j=10
- PS C:\>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
- Loop med if-satsen inuti:
- PS C:\>$i=5
- PS C:\>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 vid varje körning tills den får värdet 8.
- Loop med strängar:
- PS C:\>$i = 0
- PS C:\>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:
- 0 är inte lika med 4, utförs 0 + 1, skickas Värdet är = 1 till skärmen
- 1 är inte lika med 4, utförs 1 + 1, skickas Värdet är = 2 till skärmen
- 2 är inte lika med 4, utförs 2 + 1, skickas Värdet är = 3 till skärmen
- 3 är inte lika med 4, utförs 3 + 1, skickas Värdet är = 4 till skärmen
- 4 är inte lika med 4, nu är det stopp
- Lösenord generator:
- PS C:\>$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: Your password is: w$g2RRM0wN
DO WHILE
do while-loopen fungerar på ett liknande sätt som while-loopen, med en viktig skillnad. I en do while-loop körs koden inuti loopen åtminstone en gång, även om villkoret inte är sant från början. Efter varje körning utvärderas villkoret, och om det fortfarande är sant, upprepas loopen.
Syntax:
do {
# Kod att upprepa minst en gång
} while ($villkor)
Exempel:
- Räkna till 5
- PS C:\>Do { $val++ ; Write-Host $val } while($val -ne 5)
- Utdata:
- 1
- 2
- 3
- 4
- 5
- Fråga efter användarens input:
- PS C:\>$input = ””
- PS C:\>do {
- >>$input = Read-Host ”Ange något tecken (sluta med ’exit’):”
- >>Write-Host ”Du angav: $input”
- >>} while ($input -ne ’exit’)
- Utdata: visar vad än användare anger på prompten
- Gissa ett nummer mellan 1 och 10
- PS C:\>$randomNumber = Get-Random -Minimum 1 -Maximum 10
- PS C:\>$guess = 0
- PS C:\>do {
- >>$guess = Read-Host ”Gissa ett nummer mellan 1 och 10”
- >>} while ($guess -ne $randomNumber)
- >>Write-Host ”Grattis! Du gissade rätt.”
- Utdata:
- Gissa ett nummer mellan 1 och 10: 5
- Gissa ett nummer mellan 1 och 10: 6
- Gissa ett nummer mellan 1 och 10: 9
- Gissa ett nummer mellan 1 och 10: 2
- Grattis! Du gissade rätt.
- Ange ditt lösenord:
- PS C:\>$attempts = 3
- PS C:\>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?”
Skillnaden
Som sagt tidigare, dessa två loopar skiljer sig från varandra och fungerar också olika. För att illustrera det, låt oss titta på hur while och do while skiljer sig från varandra. Låt oss säga att $i är lika med 11. Hur kommer dessa loopar att bete sig?
Här är While-loopen:
PS C:\>$i = 11
PS C:\>while ($i -lt 10) {
>>$i
>>$i++
>>}
I detta fall kommer While-loopen aldrig att köras. Den kommer att utvärdera villkorssatsen och inse att $i inte är mindre än 10, så loopen kommer inte att köras alls.
Här är Do While motsvarigheten:
PS C:\>$i = 11
PS C:\>Do {
>>$i
>>$i++
>>} while ($i -lt 10)
I detta fall kommer do-loopen att köras första gången innan den villkorliga While-satsen utvärderas. Den kommer att finna att $i inte är mindre än 10, men koden i loopen kommer fortfarande att köras minst en gång. Så i slutet av detta kommer $i att vara 12 istället för 11, eftersom $i ökas även om villkoret inte uppfylls från början.