Udostępnij za pośrednictwem


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.

ZOBACZ RÓWNIEŻ

about_Comparison_Operators

about_Continue

about_For

about_Foreach

about_Switch

about_Throw

about_Trap

about_Try_Catch_Finally

about_While