Логические операторы и управляющие инструкции в Windows PowerShell, часть 2

В прошлой части мы разобрались с логическими операторами и начали описывать управляющие инструкции в Windows PowerShell. Продолжим перечисление.

Цикл ForEach

ForEach позволяет последовательно перебирать элементы коллекции, роль которой обычно исполняет массив. Особенностью цикла ForEach является то, что его синтаксис зависит от того, где расположена инструкция — внутри конвейера команд или вне его.

ForEach вне конвейера команд

В этом случае цикл выглядит следующим образом:

ForEach ($элемент in $коллекция) {блок_команд}

В круглых скобках указывается коллекция. При выполнении цикла PowerShell автоматически создает переменную $элемент. Перед каждой итерацией в цикле этой переменной присваивается очередного элемента в коллекции. На каждом из элементов выполняется блок_команд.

Например, следующий код берет элементы из массива $primerArray и умножает их на 2:

$primerArray = 1,2,3,4
ForEach ($primer in $primerArray) {2*$primer}
Логические операторы и управляющие инструкции в Windows PowerShell
Цикл ForEach

Сначала мы создаём массив $primerArray и наполняем его содержимым. При первом выполнении цикла переменной $primer придаётся значение первого элемента массива. Далее с переменной совершаются действия, описанные в нашем блоке кода. Цикл повторяется до тех пор, пока не будут перебраны все элементы массива.

При использовании инструкции ForEach создавать коллекции элементов необязательно. Мы можем работать уже с существующими при помощи соответствующих командлетов.

Например, при помощи командлета dir мы можем сформировать коллекцию файлов с расширением txt в текущей папке. Код, приведенный ниже, считает общий размер данных файлов.

$a=0; ForEach ($b in dir *.txt) {$a += $b.Length}

Логические операторы и управляющие инструкции в Windows PowerShell

В этом примере мы создаём переменную $a с нулевым значением. Затем при помощи командлета dir формируем коллекцию файлов с расширением txt в той директории, где мы сейчас находимся. Значение элементов этой коллекции придаётся переменной $b. После этого к текущему значению переменной $a добавляет значение поля Length (размер файла) переменной $b. Как итог, если мы обратимся к переменной $a, она покажет нам суммарный размер файлов с расширением txt.

ForEach внутри конвейера команд

Если инструкция ForEach находится внутри конвейера команд, то PowerShell используется псевдоним ForEach, соответствующий командлету ForEach-Object. Таким образом, на самом деле, в данном случае выполняется командлет ForEach-Object. В данном случае элементы коллекции предоставляются предыдущим командлетом в конвейере, поэтому часть ($элемент in $коллекция) не нужна.

В упрощенном виде ForEach внутри конвейера выглядит следующим образом:

команда | ForEach {блок_команд}

В таком случае пример с подсчетом размера txt-файлов будет выглядеть следующим образом.

$a=0; dir *.txt | ForEach {$a += $_.Length}
Логические операторы и управляющие инструкции в Windows PowerShell
ForEach в конвейере команд

На самом деле, в псевдониме ForEach может указываться не один блок команд, а три.

команда | ForEach {начальный_блок_команд} {средний_блок_команд} {конечный_блок_команд}

Начальный и конечный блоки команд выполняются один раз, а средний — каждый раз при очередной итерации.

Вот как будет выглядеть наш пример в данном случае:

dir *.txt | ForEach {$a=0} {$a += $_.Length} {Write-Host $a}

Логические операторы и управляющие инструкции в Windows PowerShell

Инструкция Break

Инструкция Break позволяет выйти из цикла любого типа, не дожидаясь окончания итераций. Вот пример её работы:

$n=0; While ($True) {If ($n++ -ge 3) {Break} $n}
Логические операторы и управляющие инструкции в Windows PowerShell
Инструкция Break

В данном случае условием цикла While является $True, поэтому такой цикл никогда бы не завершился. Инструкция Break срабатывает при достижении переменной $n значения 3 и прекращает работу цикла.

Инструкция Continue

Инструкция Continue осуществляет переход к следующей итерации цикла любого типа.

For ($n=0; $n -le 7; $n++) {If ($n -ge 5) {Continue} $n}
Логические операторы и управляющие инструкции в Windows PowerShell
Инструкция Continue

Здесь на экран выводятся цифры от 0 до 4, так как для всех последующих срабатывает инструкция Continue.

В следующей части мы закончим разбирать управляющие инструкции в Windows PowerShell.

Продолжение следует…

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *