📜  bash for 循环步骤 - Shell-Bash (1)

📅  最后修改于: 2023-12-03 15:29:34.620000             🧑  作者: Mango

Bash For 循环步骤

在Shell编程中,for循环是一个非常基本和常用的循环结构。它可以用来迭代数组、文件列表、命令输出等。本文将介绍Bash for循环的语法、特点和一些例子。

Bash for循环语法

下面是Bash for循环的基本语法:

for var in item1 item2 ... itemN
do
    command1
    command2
    ...
    commandN
done

其中,var是循环变量,每次循环将取到item1item2、...、itemN中的一个值。dodone是循环体,循环体中的命令将在每次循环中执行。

数组迭代

我们可以使用for in循环遍历数组中的所有元素。

#!/bin/bash

# 定义数组
arr=("apple" "banana" "orange")

# 遍历数组
for fruit in "${arr[@]}"
do
    echo "fruit: $fruit"
done

上面的例子中,${arr[@]}表示整个数组。循环变量fruit将依次取到数组中的每个元素。

文件列表迭代

我们可以使用for in循环遍历某个目录下的所有文件。下面的例子展示如何遍历当前目录下所有的文件,并将文件名输出到控制台。

#!/bin/bash

# 遍历当前目录下的所有文件
for filename in *
do
    # 过滤掉目录
    if [ -f "$filename" ]; then
        echo "$filename"
    fi
done
命令输出迭代

我们可以使用for in循环遍历某个命令的输出结果。下面的例子展示如何遍历某个目录下所有扩展名为.png的文件,并将它们复制到另一个目录。

#!/bin/bash

# 遍历所有.png文件,并复制到另一个目录
for file in $(ls *.png)
do
    cp "$file" "/path/to/dest/"
done

在这个例子中,$(ls *.png)表达式将展开为所有扩展名为.png的文件列表。

Bash for循环特点

Bash for循环有一些特点和限制,需要注意。

路径展开

Bash for循环中的循环变量var将展开为给定的item之一,但它并不一定是一个单一的值。它可以是路径展开或命令替换的结果。

#!/bin/bash

# 遍历路径
for path in /etc/*
do
    echo "path: $path"
done

# 遍历命令输出
for arg in $(ls /tmp)
do
    echo "arg: $arg"
done

上面的例子中,第一个循环变量path将展开为/etc目录下的所有文件和目录;第二个循环变量arg将展开为ls /tmp命令的输出结果。

多重循环

我们可以使用多个for in循环来实现多重循环,以迭代二维数组或矩阵。

#!/bin/bash

# 定义二维数组
arr=(["0,0"]="1" ["0,1"]="2" ["1,0"]="3" ["1,1"]="4")

# 遍历二维数组
for i in 0 1
do
    for j in 0 1
    do
        echo "arr[$i,$j]: ${arr[$i,$j]}"
    done
done

上面的例子中,我们通过定义一个关联数组arr来表示一个$2\times2$的矩阵。使用两个for in循环来迭代行和列,可以输出矩阵的每个元素。

细节注意

与其他编程语言不同,Bash for循环中的循环变量var不需要事先声明。它的作用域仅限于循环体内。循环体中的命令可以是任何合法的Shell命令,包括其他循环。

结语

本文介绍了Bash for循环的语法、特点和一些例子。for循环是Shell编程中必备的一项技能,可以用来迭代数组、文件和命令输出等。有了这些知识,您将可以更加轻松地编写Shell脚本。