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

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

Инструкция Switch

Инструкция Switch объединяет несколько проверок условий внутри одной конструкции. В PowerShell эта Switch обладает широкими возможностями, а именно:

  • может использоваться как аналог цикла, проверяя не один элемент, а целый массив;
  • может проверять элементы на соответствие шаблону с подстановочными символами или регулярными выражениями;
  • может обрабатывать текстовые файлы, используя в качестве проверяемых элементов строки из файла.

Итак, для начала рассмотрим самый простой вариант, когда одно скалярное выражение по очереди сопоставляется с несколькими условиями.

$a = 2
Switch ($a) {
1 {"Один"}
2 {"Два"}
3 {"Три"}
}
Логические операторы и управляющие инструкции в Windows PowerShell
Инструкция Switch

Здесь значение переменной $a последовательно сравнивается с числами 1, 2 и 3. При совпадении значений, отрабатывается блок кода в фигурных скобках.

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

$a = 1
Switch ($a) {
1 {"Один"}
2 {"Два"}
3 {"Три"}
1 {"И еще раз один"}
}

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

Если нужно ограничиться только первым совпадениям, то тут нам поможет функция Break.

$a = 1
Switch ($a) {
1 {"Один"; Break}
2 {"Два"}
3 {"Три"}
1 {"И еще раз один"}
}

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

Если ни одно соответствие не будет найдено, инструкция Switch не выполнит никаких действий.

$a = 1
Switch ($a) {
2 {"Два"}
3 {"Три"}
}

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

Если не найдено ни одного соответствия, мы можем задать действие, выполняемое в данном случае, при помощи команды Default.

Switch (5) {
1 {"Один"}
2 {"Два"}
3 {"Три"}
Default {"Совпадений нет"}
}

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

Нужно отметить, что сравнение происходит без учета регистра.

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

Если регистр всё же нужно учитывать, то сделать это при помощи параметра -CaseSensitive.

Switch -CaseSensitive ('abc') {
'abc' {"Раз"}
'ABC' {"Два"}
}

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

Можно проверять элементы на соответствие шаблону. Для этого используется параметр -Wildcard.

Switch -Wildcard ('abc') {
'a*' {"Начинается с a"}
'*c' {"Оканчивается на c"}
}

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

Как и предыдущих примерах, проверяемому объекту соответствует переменная $_. В этом мы можем убедиться через следующий пример:

Switch -Wildcard ('abc') {

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

Если мы проверяем регулярные выражения, то предыдущий пример будет иметь вид:

Switch -Regex ('abc') {
'^a' {"$_ начинается с a"}
'c$' {"$_ оканчивается на c"}
}

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

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

Switch (7) {
{$_ -gt 3} {"$_ больше 3"}
{$_ -lt 10} {"$_ меньше 10"}
7 {"$_ равно 7"}
}

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

Язык PowerShell допускает использование в качестве проверяемых значений массивов элементов. При этом массивы могут быть заданы явно или использованы путём считывания строк из текстового файла.

Switch -Wildcard (dir $env:SystemRoot) {
*.txt {$txt++}
*.log {$log++}
}

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

В данном случае мы просматриваем файлы системного каталога при помощи dir $env:SystemRoot. Отбираются файлы с расширением .txt и .log. Количество этих файлов суммируется и выводится по команде «txt-файлы: $txt log-файлы: $log».

Для использования в качестве массива строк из определённого файла нужно указать параметр -File и путь к этому файлу.

Итак, пусть в системном каталоге есть файл DPINST.LOG, и нам нужно вывести все строки, содержащие слово Install.

Switch -Wildcard -File $env:SystemRoot\DPINST.LOG {
*Install* {$_}
}

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

Для этого мы используем параметры -Wildcard и -File, указываем путь к файлу и искомое слово в переменной $_.

На этом обширная тема логических операторов и управляющих инструкций завершена. 🙂

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

Ваш адрес email не будет опубликован.