Informacje o przerwie
KRÓTKI OPIS
Opisuje instrukcję, której można użyć do natychmiastowego zamknięcia instrukcji Foreach, For, While, Do lub Switch.
DŁUGI OPIS
Gdy instrukcja Break pojawia się w pętli, takiej jak Foreach, For lub While, instrukcja Break powoduje natychmiastowe zamknięcie pętli programu PowerShell. W konstrukcji przełącznika przerwa powoduje zamknięcie bloku kodu przełącznika przez program PowerShell.
Instrukcja Break może zawierać etykietę, która umożliwia wyjście z osadzonych pętli. Etykieta może określać dowolne słowo kluczowe pętli, takie jak Foreach, For lub While, w skrycie.
W poniższym przykładzie pokazano, jak użyć instrukcji Break, aby zamknąć instrukcję For:
for($i=1; $i -le 10; $i++) {
Write-Host $i
break
}
W tym przykładzie instrukcja Break kończy pętlę For, gdy zmienna $i równa 1. Mimo że instrukcja For daje wartość True, dopóki $i jest większa niż 10, program PowerShell osiąga instrukcję break przy pierwszym uruchomieniu pętli For.
Częściej używa się instrukcji Break w pętli, w której musi zostać spełniony warunek wewnętrzny. Rozważmy następujący przykład instrukcji Foreach:
$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"
W tym przykładzie instrukcja Foreach iteruje tablicę $varB. Za każdym razem, gdy blok kodu jest uruchamiany, zmienna $i jest zwiększana o 1. Instrukcja If oblicza wartość False dwa razy, gdy pętla zostanie uruchomiona. Po raz trzeci pętla jest uruchamiana, $i równa się 3, a zmienna $val równa się 30. W tym momencie zostanie uruchomiona instrukcja Break, a pętla Foreach kończy działanie.
Wyrwać się z innych instrukcji pętli w taki sam sposób, jak wyrwać się z pętli Foreach. W poniższym przykładzie instrukcja Break kończy instrukcję While, gdy wyjątek DivideByZeroException jest uwięziony przy użyciu instrukcji Trap.
$i = 3
while ($true) {
trap [DivideByZeroException] {
Write-Host 'divide by zero trapped'
break
}
1 / $i--
}
Instrukcja Break może zawierać etykietę. Jeśli używasz słowa kluczowego Break z etykietą, program PowerShell zamyka pętlę oznaczona etykietą zamiast zamykać bieżącą pętlę. Składnia etykiety jest następująca (w tym przykładzie pokazano etykietę w pętli While):
:myLabel while (<condition>
) { <statement list>
}
Etykieta jest dwukropkiem, po którym następuje przypisana nazwa. Etykieta musi być pierwszym tokenem w instrukcji i musi być zgodna ze słowem kluczowym pętli, takim jak While.
W programie PowerShell tylko słowa kluczowe pętli, takie jak Foreach, For i While, mogą mieć etykietę.
Przerwanie powoduje przeniesienie wykonywania z pętli oznaczonej etykietą. W osadzonych pętlach ma inny wynik niż słowo kluczowe Break, gdy jest używane przez siebie. W tym przykładzie schematu jest instrukcja While z instrukcją For:
: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
Jeśli warunek 2 ma wartość True, wykonanie skryptu pomija instrukcję po pętli oznaczonej etykietą. W tym przykładzie wykonanie rozpoczyna się ponownie z instrukcją "$a = $c".
Można zagnieżdżać wiele oznaczonych pętlami, jak pokazano w poniższym przykładzie schematu.
: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"
Jeśli zmienna $b ma wartość True, wykonanie skryptu zostanie wznowione po pętli oznaczonej jako "czerwona". Jeśli zmienna $c ma wartość True, wykonanie kontrolki skryptu zostanie wznowione po pętli oznaczonej etykietą "żółty".
Jeśli zmienna $a zwróci wartość True, wykonanie zostanie wznowione po pętli najwsłodszej wewnętrznej. Etykieta nie jest potrzebna.
Program PowerShell nie ogranicza możliwości wznowienia wykonywania etykiet. Etykieta może nawet przekazywać kontrolkę między granicami skryptu i funkcji.
Słowo kluczowe Break służy do opuszczania konstrukcji przełącznika. Na przykład następująca instrukcja Switch używa instrukcji Break do testowania dla najbardziej określonego warunku:
$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
}
}
W tym przykładzie zmienna $var jest tworzona i inicjowana do wartości ciągu "word2". Instrukcja Switch używa klasy Regex, aby dopasować wartość zmiennej jako pierwszą z terminem "word2". (Klasa Regex jest wyrażeniem regularnym Microsoft .NET Framework klasy). Ponieważ wartość zmiennej i pierwszy test w instrukcji Switch są zgodne, pierwszy blok kodu w instrukcji Switch jest uruchamiany.
Gdy program PowerShell osiągnie pierwszą instrukcję Break, instrukcja Switch kończy działanie. Jeśli cztery instrukcje Break zostaną usunięte z przykładu, zostaną spełnione wszystkie cztery warunki. W tym przykładzie użyto instrukcji break, aby wyświetlić wyniki po spełnieniu najbardziej określonego warunku.