当前位置: 首页 > news >正文

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文件,并重命名它们。
  • 内层循环对每个重命名后的文件执行一系列预定义的操作。

结语

感谢您的阅读!如果你有任何疑问或想要分享的经验,请在评论区留言交流!

相关文章:

  • 塔能科技:点亮节能之光,赋能工厂与城市
  • 013几何数学——算法备赛
  • 科技助力防灾减灾:卫星电话走进应急救援队伍
  • Python创意爱心代码分享指南
  • ​LangChain、LlamaIndex、MCP、Spring AI、Ollama​ 和 ​DeepSeek​ 的定义、关系及典型架构设计
  • 完美解决.NET Framework 4.0 中 System.Drawing 库不支持 WebP 格式的图像处理
  • Docker 获取 Python 镜像操作指南
  • Dots:动态实现GPUECSAnimationBaker的受击变红效果
  • 不同参数大小的DeepSeekR1模型对Java中new FileInputStream(“test.txt“).seek(100);语法错误的检查
  • WPF之Button控件详解
  • Golang|外观模式和具体逻辑
  • 【杂谈】-人工智能驱动的网络安全威胁:新一代网络钓鱼
  • 第33周JavaSpringCloud微服务 分布式综合应用
  • 系统架构师2025年论文《论面向对象的软件设计——UML 在面向对象软件架构中的应用》
  • GpuGeek全面接入智谱GLM Z1系列推理模型!!
  • VLM-E2E:通过多模态驾驶员注意融合增强端到端自动驾驶——论文阅读
  • 解决redis序列号和反序列化问题
  • 喷泉码解码成功率
  • Transformer数学推导——Q29 推导语音识别中流式注意力(Streaming Attention)的延迟约束优化
  • Python-pandas-DataFrame取值--.loc[]、.iloc[] 具体的操作及详细语义和语法说明
  • 卸任兰大校长后,严纯华院士重返北大作报告
  • 病人有头发,照护者不发疯:《黑镜》中的身体缺席与虚伪关怀
  • 俄乌战火不熄,特朗普在梵蒂冈与泽连斯基会晤后口风突变
  • 亮剑浦江丨上海网信部门处罚一批医疗服务类互联网企业,三大类问题值得关注
  • 马上评丨学生举报食堂饭菜有蛆,教育局应该护谁的犊子
  • 靳燕出任中央戏剧学院党委副书记,原任中戏院长助理