Om break
KORT BESKRIVNING
Beskriver en instruktion som du kan använda för att omedelbart avsluta Foreach-, For-, While-, Do- eller Switch-instruktioner.
LÅNG BESKRIVNING
När en Break-instruktion visas i en loop, till exempel en Foreach-, For- eller While-loop, gör Break-instruktionen att PowerShell omedelbart avslutar loopen. I en Switch-konstruktion gör Break att PowerShell avslutar växlingskodblocket.
En Break-instruktion kan innehålla en etikett som gör att du kan avsluta inbäddade loopar. En etikett kan ange valfritt loopnyckelord, till exempel Foreach, For eller While, i ett skript.
I följande exempel visas hur du använder en Break-instruktion för att avsluta en For-instruktion:
for($i=1; $i -le 10; $i++) {
Write-Host $i
break
}
I det här exemplet avslutar break-instruktionen For-loopen när variabeln $i är lika med 1. Även om For-instruktionen utvärderas till True tills $i är större än 10, når PowerShell break-instruktionen första gången For-loopen körs.
Det är vanligare att använda break-instruktionen i en loop där ett inre villkor måste uppfyllas. Överväg följande Foreach-instruktionsexempel:
$i=0
$varB = 10,20,30,40
foreach ($val in $varB) {
$i++
if ($val -eq 30) {
break
}
}
Write-Host "30 was found in array position $i"
I det här exemplet itererar Foreach-instruktionen $varB-matrisen. Varje gång kodblocket körs ökas variabeln $i med 1. If-instruktionen utvärderas till False de två första gångerna loopen körs. Tredje gången loopen körs är $i lika med 3 och variabeln $val är lika med 30. Nu körs Break-instruktionen och Foreach-loopen avslutas.
Du bryter ut från de andra loopningsinstruktionerna på samma sätt som du bryter ut från Foreach-loopen. I följande exempel avslutar Break-instruktionen en While-instruktion när ett DivideByZeroException-undantag fångas med trap-instruktionen.
$i = 3
while ($true) {
trap [DivideByZeroException] {
Write-Host 'divide by zero trapped'
break
}
1 / $i--
}
En Break-instruktion kan innehålla en etikett. Om du använder nyckelordet Bryt med en etikett avslutar PowerShell den märkta loopen i stället för att avsluta den aktuella loopen. Syntaxen för en etikett är följande (det här exemplet visar en etikett i en While-loop):
:myLabel while (<condition>
) { <statement list>
}
Etiketten är ett kolon följt av ett namn som du tilldelar. Etiketten måste vara den första token i en -instruktion, och den måste följas av nyckelordet loopning, till exempel While.
I PowerShell kan endast loopnyckelord, till exempel Foreach, For och While, ha en etikett.
Break flyttar körningen från den märkta loopen. I inbäddade loopar har detta ett annat resultat än vad nyckelordet Break har när det används av sig självt. Det här schematiska exemplet har en While-instruktion med en For-instruktion:
:myLabel while (<condition 1>) {
for ($item in $items) {
if (<condition 2>) {
break myLabel
}
$item = $x # A statement inside the For-loop
}
}
$a = $c # A statement after the labeled While-loop
Om villkor 2 utvärderas till Sant hoppar körningen av skriptet ned till -instruktionen efter den märkta loopen. I exemplet startar körningen igen med instruktionen "$a = $c".
Du kan kapsla många etiketterade loopar, som du ser i följande schemaexempel.
:red while (<condition1>) {
:yellow while (<condition2>) {
while (<condition3>) {
if ($a) {break}
if ($b) {break red}
if ($c) {break yellow}
}
Write-Host "After innermost loop"
}
Write-Host "After yellow loop"
}
Write-Host "After red loop"
Om variabeln $b utvärderas till Sant återupptas körningen av skriptet efter loopen som är märkt "röd". Om variabeln $c utvärderas till Sant återupptas körningen av skriptkontrollen efter loopen som är märkt "gul".
Om variabeln $a utvärderas till Sant återupptas körningen efter den innersta loopen. Ingen etikett behövs.
PowerShell begränsar inte hur långt etiketter kan återuppta körningen. Etiketten kan till och med skicka kontroll över skript- och funktionsanropsgränser.
Nyckelordet Bryt används för att lämna switch-konstruktionen. Följande Switch-instruktion använder till exempel Break-instruktioner för att testa för det mest specifika villkoret:
$var = "word2"
switch -regex ($var) {
"word2" {
Write-Host "Exact" $_
break
}
"word.*" {
Write-Host "Match on the prefix" $_
break
}
"w.*" {
Write-Host "Match on at least the first letter" $_
break
}
default {
Write-Host "No match" $_
break
}
}
I det här exemplet skapas och initieras variabeln $var till strängvärdet "word2". Switch-instruktionen använder klassen Regex för att matcha variabelvärdet först med termen "word2". (Klassen Regex är ett reguljärt uttryck för Microsoft .NET Framework-klass.) Eftersom variabelvärdet och det första testet i Switch-instruktionen matchar körs det första kodblocket i Switch-instruktionen.
När PowerShell når den första Break-instruktionen avslutas Switch-instruktionen. Om de fyra Break-uttrycken tas bort från exemplet uppfylls alla fyra villkoren. I det här exemplet används break-instruktionen för att visa resultat när det mest specifika villkoret uppfylls.