Shell脚本-嵌套循环应用案例
在Shell脚本编程中,嵌套循环是一种强大的工具,可以用于处理复杂的任务和数据结构。通过在一个循环内部再嵌套另一个循环,我们可以实现对多维数组、矩阵操作、文件处理等多种高级功能。本文将通过几个实际的应用案例来展示如何使用嵌套循环解决具体的编程问题。
案例一:打印乘法表
一个常见的应用是打印乘法表。通过嵌套循环,我们可以轻松地生成并打印出指定范围内的乘法表。
脚本示例:
#!/bin/bashfor ((i=1; i<=9; i++)); dofor ((j=1; j<=i; j++)); doprintf "%d*%d=%-4d" $j $i $((i*j))doneecho ""
done
说明:
- 外层循环控制行数(即乘数),内层循环控制列数(即被乘数)。
printf
函数用于格式化输出,使得每一项占据相同宽度,从而保持表格整齐。
案例二:遍历目录树
假设我们需要编写一个脚本来递归遍历目录及其子目录,并列出每个目录下的所有文件。
脚本示例:
#!/bin/bashtraverse_directory() {local directory=$1 # 获取传入的目录路径for file in "$directory"/*; doif [ -d "$file" ]; thenecho "Directory: $file"traverse_directory "$file" # 递归调用自身以遍历子目录elif [ -f "$file" ]; thenecho "File: $file"fidone
}root_directory="/path/to/start/directory"
traverse_directory "$root_directory"
说明:
- 使用递归函数
traverse_directory
来遍历目录树。 - 对于每个项目,首先检查它是目录还是文件,然后根据类型采取相应的行动。
案例三:矩阵转置
给定一个二维数组(矩阵),我们可以使用嵌套循环将其转置(即将行变为列,列变为行)。
脚本示例:
#!/bin/bashmatrix=("1 2 3""4 5 6""7 8 9"
)rows=${#matrix[@]}
cols=$(echo "${matrix[0]}" | wc -w)echo "Original Matrix:"
for ((i=0; i<rows; i++)); doecho "${matrix[$i]}"
doneecho ""echo "Transposed Matrix:"
for ((j=0; j<cols; j++)); dorow=""for ((i=0; i<rows; i++)); dovalue=$(echo "${matrix[$i]}" | cut -d' ' -f$((j+1)))row="$row $value"doneecho "$row"
done
说明:
- 首先确定矩阵的行列数。
- 外层循环遍历每一列,内层循环遍历每一行,构建转置后的矩阵。
案例四:批量处理文件
假设我们需要对某个目录下的所有.txt
文件进行批量处理,比如为每个文件添加前缀或后缀。
脚本示例:
#!/bin/bashprefix="backup_"directory="/path/to/txt/files"
cd "$directory" || exitfor file in *.txt; doif [ -f "$file" ]; thennew_name="${prefix}${file}"mv "$file" "$new_name"echo "Renamed '$file' to '$new_name'"# 进一步处理新命名的文件for operation in "operation1" "operation2"; docase $operation in"operation1")echo "Performing operation1 on $new_name";;"operation2")echo "Performing operation2 on $new_name";;esacdonefi
done
说明:
- 外层循环遍历当前目录下的所有
.txt
文件,并重命名它们。 - 内层循环对每个重命名后的文件执行一系列预定义的操作。
结语
感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!