流量控制

已完成

流控制是指代码在控制台或脚本中的运行方式。 它介绍了代码遵循的流和控制流的方式。 有多种可用的构造可帮助控制流。 代码可以运行所有语句或只运行其中一些语句。 它还可以重复某些语句,直到满足特定的条件。

让我们看一下这些流控制构造,看看它们能做什么:

  • 清理输入。 如果在脚本中使用参数,则需要确保参数保留合理的值,从而使脚本按预期方式工作。 编写代码来管理此过程称为清理输入。

  • 控制执行流。 上一种方法可确保获取合理且正确的输入数据。 此方法主要决定代码的运行方式。 值集可以确定运行的语句组。

  • 循环访问数据。 有时,数据采用数组形式,数组是包含许多项的数据结构。 对于此类数据,可能需要检查每个项,并对每个项执行操作。 PowerShell 中的许多构造可帮助处理该过程。

    备注

    循环访问数组超出了本模块的范畴。 在 PowerShell 中,可以通过多种构造来处理流控制。 我们不能全部列出,而是只讨论一些可能会在读取或写入的脚本中出现的重要构造。

使用 IfElseIfElse 管理输入和执行流

可使用 If 构造来确定表达式是 True 还是 False。 根据这点,你可以运行由 If 构造定义的语句。 If 的语法如下所示:

If (<expression that evaluates to True or False>) 
{
  # Statement that runs only if the preceding expression is $True.
}

运算符

PowerShell 提供了两个内置参数,用于确定表达式是 True 还是 False

  • $True 指示表达式为 True
  • $False 指示表达式为 False

可以使用运算符来确定表达式是 True 还是 False。 下面是几个运算符。 基本思想通常是在给定运算符条件的情况下,确定运算符左侧的某些部分是否与右侧某些部分匹配。 运算符可以表达条件,如某部分是否等于其他部分、大于其他部分或与正则表达式匹配。

下面是使用运算符的示例。 -le 运算符确定运算符左侧的值是否小于或等于右侧的值:

$Value = 3
If ($Value -le 0) 
{
  Write-Host "Is negative"
}

此代码不会显示任何内容,因为表达式的计算结果为 False。 值 3 明显是正值。

Else

If 构造仅在语句计算为 True 时才运行语句。 如果要处理其计算结果为 False 的情况,该怎么办? 此时应使用 Else 构造。 If 表示“如果此特定情况为 true,则运行此语句”。Else 不采用表达式。 它捕获 If 子句计算为 False 的所有情况。 如果 IfElse 组合在一起,代码会在两个构造之一中运行语句。 让我们修改前面的代码,使其包含 Else 构造:

$Value = 3
If ($Value -le 0) 
{
  Write-Host "Is negative"
} Else {
  Write-Host "Is Positive"
}

因为我们将 Else 放在 If 的右大括号旁,所以创建了一个可以作为一个整体使用的连接构造。 如果在控制台中运行此代码,会看到 Is Positive 输出。 这是因为 If 的值为 False,但 Else 的值为 True。 因此 Else 输出其语句。

备注

仅当在 Else 之上定义了 If 构造时,才可以使用它。

ElseIf

IfElse 可以很好地涵盖代码可采用的所有路径。 ElseIf 是另一种有用的构造。 ElseIf 应与 If 一起使用。 它显示“如果前面的 If 语句的计算结果为 False,则将计算此构造中的表达式”。与 If 一样,ElseIf 可以采用表达式,因此将 ElseIf 视为次要的 If。

下面是使用 ElseIf 的示例:

# _FullyTax.ps1_
# Possible values: 'Minor', 'Adult', 'Senior Citizen'
$Status = 'Minor'
If ($Status -eq 'Minor') 
{
  Write-Host $False
} ElseIf ($Status -eq 'Adult') {
  Write-Host $True
} Else {
  Write-Host $False
}

可以采用更简洁的方式编写此代码,但此方法确实指出了 ElseIf 的用法。 即首先对 If 求值,然后依次对 ElseIfElse 求值。

备注

Else 一样,如果未在其上方定义 If,则不能使用 ElseIf