·  阅读

在编程中,循环是一个简单而强大的概念。循环是一组指令的重复,除非满足某个条件。一个适当的循环可以节省时间,提高代码的效率。PowerShell,作为一种脚本语言,支持各种形式的循环。

在本指南中,看看如何在PowerShell中使用foreach循环。

PowerShell循环

原则上,所有的循环都是一样的。然而,为了获得更好的编码体验和可读性,各种编程语言以不同的方式实现循环概念。事实上,同一种语言可以支持多种类型的循环,每一种都有其独特的结构。

PowerShell支持几种类型的循环。

  • for:一个标准的循环,用于执行特定次数的某些任务。
  • while:一个标准的循环,用于执行特定次数的任务。它一直执行一组操作,直到条件得到满足。
  • do while:只要条件为真,该循环就一直运行。然而,它总是会执行第一次。
  • Do-until:它的工作原理几乎与do while相似。唯一的区别是,它只在给定的条件不为真时才会执行。
  • foreach-object:这个循环对每个输入对象执行一个操作。
  • 正如文章的标题所暗示的,我们将看一下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循环的一些常见实现。

    分类:
    开发工具
    标签: