在编程中,循环是一个简单而强大的概念。循环是一组指令的重复,除非满足某个条件。一个适当的循环可以节省时间,提高代码的效率。PowerShell,作为一种脚本语言,支持各种形式的循环。
在本指南中,看看如何在PowerShell中使用foreach循环。
PowerShell循环
原则上,所有的循环都是一样的。然而,为了获得更好的编码体验和可读性,各种编程语言以不同的方式实现循环概念。事实上,同一种语言可以支持多种类型的循环,每一种都有其独特的结构。
PowerShell支持几种类型的循环。
正如文章的标题所暗示的,我们将看一下foreach循环。
PowerShell中的forEach循环
foreach循环结构的代码如下
ForEach(ITEM in COLLECTION)
ITEM:它是一个单一的值或对象,随着每次迭代而变化。
COLLECTION:它可以是一个数组、值的列表、集合或对象。
<code_block>:它是一旦循环条件得到满足就会运行的代码块。它一般使用ITEM。
Foreach是最常见和最简单的PowerShell循环之一。它读取整个项目集合,对于每个项目,它执行定义的操作。
它可以用于许多情况,例如,对一个目录的内容进行操作。
Foreach循环的实践
在本节中,我们将看一下foreach循环的一些示例实现。为了执行这些代码,我已经准备了一个空的PowerShell脚本。
$ nano foreach-loop.ps1
脚本将看起来像这样。
$ #!/snap/bin/powershell
标记PowerShell脚本文件为可执行文件。
$ chmod +x foreach-loop.ps1
通过字符串数组进行foreach
在第一个演示中,我们将实现一个foreach循环,从一个城市名称的字符串数组中读取,并在屏幕上打印出城市名称。
首先,声明这个字符串数组。
$cities = ("Tokyo", "New York", "Moscow", "London", "Sydney")
现在,实现foreach循环,处理数组中的每个元素。
foreach ($city in $cities)
echo $city
通过运行脚本来测试该代码。
$ ./foreach-loop.ps1
**遍历一个数字集合
**在这个例子中,我们将实现与前一个类似的foreach循环。不同的是,它将通过一个数字数组来代替。
声明数字数组。
$numbers=(9,8,7,6,5,4,3,2,1)
现在,实现foreach循环,逐一打印数字。
foreach ($number in $numbers)
echo $number
让我们把代码付诸行动。
$ ./foreach-loop.ps1
通过文件进行foreach
这是使用foreach循环的最常见的情况之一。在其他cmdlet的帮助下,我们可以获得某些目录/文件的具体信息,并使用这些信息来执行必要的操作。
在这个例子中,foreach循环将检查目录/home/viktor/Desktop/sample_dir的内容并打印文件名。
foreach($file in Get-ChildItem -Recurse -Path /home/viktor/Desktop/sample_dir)
echo $file
运行代码。
$ ./foreach-loop.ps1
在这里,cmdletGet-ChildItem在描述的位置上获取项目。标志"-Path "描述了要查找的目录。如果有多层次的子目录,那么使用"-Recurse "将递归地获得所有的子项目。如果你想递归到某一深度,你也可以使用"-深度 "参数.
我们还可以对代码进行微调,只搜索特定的文件扩展名。
foreach($file in Get-ChildItem -Recurse -Path /home/viktor/Desktop/sample_dir/*.txt)
echo $file
Foreach over CSV
一个CSV文件是一个由数值组成的文本数据库,每个数值由分隔符(主要是逗号)分隔。它是一种简单而有效的结构,以文本格式存储结构化数据。CSV格式被各种应用程序和数据库引擎使用,以方便和易于使用。
我们可以使用foreach循环来处理CSV文件的单个值,并采取相应的行动。下面的例子就是这样做的。
$values = (Get-Content /home/viktor/sample.csv)[0].split(",")
foreach ($value in $values){
echo $value
Foreach方法
到现在为止,我们已经看到了foreach循环的作用,对吗?在PowerShell中,它也作为foreach()方法出现。从PowerShell v4开始,这个方法存在于数组或对象的集合中。该方法有一个标准的脚本块作为参数,包含了每次迭代要采取的行动。
让我们来看看foreach()方法的操作。首先,创建一个样本数组。
$numbers=(2,4,8,16,32,64,128,256,512)
现在,我们可以调用该方法,并在每次迭代中描述一个简单的回声命令。
$numbers.ForEach({
echo $_
Foreach-Object
Foreach循环也可以直接处理对象。要做到这一点,有一个专门的cmdlet,名为Foreach-Object。它将一个对象作为输入,并对其元素进行迭代。
在下一个例子中,我们将在一个特定的目录中搜索".txt "文件,并使用Foreach-Object根据搜索结果中的每个元素来采取行动。
$names = Get-ChildItem -Recurse /home/viktor/Desktop/sample_dir/*.txt
$names |
Foreach-Object {
echo $_
正如你所看到的,Foreach-Object的核心结构是非常相似的。唯一不同的是,你可以使用管道来传递对象。
最后的思考
PowerShell中的foreach循环是一个简单但有效且强大的循环。它可以基于对象、数组或单个元素来操作。本指南演示了foreach循环的一些常见实现。