流量控制
流控制是指代码在控制台或脚本中的运行方式。 它介绍了代码遵循的流和控制流的方式。 有多种可用的构造可帮助控制流。 代码可以运行所有语句或只运行其中一些语句。 它还可以重复某些语句,直到满足特定的条件。
让我们看一下这些流控制构造,看看它们能做什么:
清理输入。 如果在脚本中使用参数,则需要确保参数保留合理的值,从而使脚本按预期方式工作。 编写代码来管理此过程称为清理输入。
控制执行流。 上一种方法可确保获取合理且正确的输入数据。 此方法主要决定代码的运行方式。 值集可以确定运行的语句组。
循环访问数据。 有时,数据采用数组形式,数组是包含许多项的数据结构。 对于此类数据,可能需要检查每个项,并对每个项执行操作。 PowerShell 中的许多构造可帮助处理该过程。
备注
循环访问数组超出了本模块的范畴。 在 PowerShell 中,可以通过多种构造来处理流控制。 我们不能全部列出,而是只讨论一些可能会在读取或写入的脚本中出现的重要构造。
使用 If
、ElseIf
和 Else
管理输入和执行流
可使用 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
的所有情况。 如果 If
和 Else
组合在一起,代码会在两个构造之一中运行语句。 让我们修改前面的代码,使其包含 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
If
和 Else
可以很好地涵盖代码可采用的所有路径。 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
求值,然后依次对 ElseIf
和 Else
求值。
备注
与 Else
一样,如果未在其上方定义 If
,则不能使用 ElseIf
。