Sdílet prostřednictvím


Informace o funkci Break

STRUČNÝ POPIS

Popisuje příkaz, který můžete použít k okamžitému ukončení příkazů Foreach, For, While, Do nebo Switch.

DLOUHÝ POPIS

Když se příkaz Break zobrazí ve smyčce, například ve smyčce Foreach, For nebo While, příkaz Break způsobí, že PowerShell okamžitě ukončí smyčku. V konstruktoru Switch způsobí přerušení PowerShellu ukončení bloku kódu Switch.

Příkaz Break může obsahovat popisek, který umožňuje ukončit vložené smyčky. Popisek může ve skriptu určovat libovolné klíčové slovo smyčky, například Foreach, For nebo While.

Následující příklad ukazuje použití příkazu Break k ukončení příkazu For:

for($i=1; $i -le 10; $i++) {
   Write-Host $i
   break
}

V tomto příkladu příkaz Break ukončí smyčku For, když se proměnná $i rovná 1. I když se příkaz For vyhodnocuje jako Pravda, dokud $i není větší než 10, PowerShell dosáhne příkazu break při prvním spuštění smyčky For.

Běžnější je použití příkazu Break ve smyčce, kde musí být splněna vnitřní podmínka. Podívejte se na následující příklad příkazu 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"

V tomto příkladu příkaz Foreach iteruje pole $varB. Při každém spuštění bloku kódu se $i proměnná zvyšovat o 1. Příkaz If se vyhodnocuje jako Nepravda při prvním dvou spuštění smyčky. Při třetím spuštění smyčky se $i rovná 3 a proměnná $val se rovná 30. V tomto okamžiku se spustí příkaz Break a smyčka Foreach se ukončí.

Ostatní příkazy smyčky přerušíte stejným způsobem, jakým se vylomíte ze smyčky Foreach. V následujícím příkladu break příkaz ukončí While příkaz, když DivideByZeroException výjimka je zachycena pomocí příkazu Trap.

$i = 3
while ($true) {
  trap [DivideByZeroException] {
    Write-Host 'divide by zero trapped'
    break
  }
   1 / $i--
}

Příkaz Break může obsahovat popisek. Pokud použijete klíčové slovo Break s popiskem, PowerShell ukončí označenou smyčku místo aktuální smyčky. Syntaxe popisku je následující (tento příklad ukazuje popisek ve smyčce While):

:myLabel while (<condition>) { <statement list>}

Popisek je dvojtečka následovaná názvem, který přiřadíte. Popisek musí být prvním tokenem v příkazu a musí za ním následovat klíčové slovo looping, například While.

V PowerShellu můžou mít popisek jenom klíčová slova smyčky, například Foreach, For a While.

Přerušení přesune provádění mimo označenou smyčku. Ve vložených smyček má tento výsledek jiný výsledek, než má klíčové slovo Break, když je použito samostatně. Tento schematický příklad obsahuje příkaz While s příkazem 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

Pokud se podmínka 2 vyhodnotí jako Pravda, spuštění skriptu přeskočí na příkaz za označenou smyčkou. V tomto příkladu spuštění začne znovu příkazem "$a = $c".

Můžete vnořit mnoho označených smyček, jak je znázorněno v následujícím příkladu schématu.

: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"

Pokud se $b proměnná vyhodnotí jako True, provádění skriptu se obnoví po smyčce označené jako "červená". Pokud se $c proměnná vyhodnotí jako True, provádění ovládacího prvku skriptu se obnoví po smyčce označené jako "žlutá".

Pokud se $a proměnná vyhodnotí jako True, provádění se obnoví po nejvnitřnější smyčce. Není potřeba žádný popisek.

PowerShell neomezuje, jak daleko může popisek pokračovat v provádění. Popisek může dokonce předat řízení přes hranice volání skriptů a funkcí.

Klíčové slovo Break se používá k opuštění konstruktoru Switch. Například následující příkaz Switch používá příkazy Break k testování nejkonsekvnější podmínky:

$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
    }
}

V tomto příkladu se vytvoří proměnná $var a inicializuje se na řetězcovou hodnotu "word2". Příkaz Switch používá třídu Regex k porovnání hodnoty proměnné nejprve s termínem "word2". (Třída Regex je třída regulárního výrazu microsoft .NET Framework.) Vzhledem k tomu, že hodnota proměnné a první test v příkazu Switch se shodují, spustí se první blok kódu v příkazu Switch.

Když PowerShell dosáhne prvního příkazu Break, příkaz Switch se ukončí. Pokud jsou z příkladu odebrány čtyři příkazy Break, jsou splněny všechny čtyři podmínky. Tento příklad používá příkaz break k zobrazení výsledků, když je splněna nejkonsifičnější podmínka.

VIZ TAKÉ

about_Comparison_Operators

about_Continue

about_For

about_Foreach

about_Switch

about_Throw

about_Trap

about_Try_Catch_Finally

about_While