如何在Bash循环中每10步执行run.sh,实现总计执行10次?附示例
没问题,我给你两种实用的Bash脚本实现方案,能精准满足你的需求——每10步执行一次run.sh,总共让它跑10次:
方法一:按步数触发,提前终止循环
这种方式适合你已经有明确的总步数逻辑,需要在每10步节点触发脚本,同时控制总执行次数:
#!/bin/bash # 初始化计数器,记录run.sh已执行的次数 run_count=0 # 循环遍历步数,10次执行 × 10步间隔 = 最多100步,达到次数后提前退出 for step in {1..100}; do # 每10步触发一次run.sh if (( step % 10 == 0 )); then ./run.sh ((run_count++)) # 达到目标次数就跳出循环,避免多余执行 if (( run_count == 10 )); then break fi fi # 这里替换成你每一步实际要执行的逻辑,比如处理文件、调用其他命令等 echo "正在执行第 $step 步..." done
逻辑说明:
- 通过
run_count变量跟踪run.sh的执行次数,严格控制不超过10次 - 循环预设最多100步(10次×10步),但只要达到10次执行就会提前退出,节省不必要的循环
- 每到10的倍数步(10、20...100)就触发一次
run.sh
方法二:直接控制执行次数,逻辑更直观
如果你的核心需求是让run.sh跑满10次,每两次之间间隔10步操作,这种方式逻辑拆分更清晰:
#!/bin/bash # 设定run.sh需要执行的总次数 total_runs=10 for run_idx in {1..$total_runs}; do # 先执行10步前置操作 for step in {1..10}; do # 计算当前是全局第几步,方便日志输出 global_step=$(( (run_idx - 1) * 10 + step )) echo "正在执行全局第 $global_step 步..." # 这里替换成你每一步的实际业务逻辑 done # 10步完成后执行run.sh echo "开始执行第 $run_idx 次 run.sh..." ./run.sh done
逻辑说明:
- 外层循环直接控制
run.sh的执行次数(10次),无需计算总步数 - 内层循环负责每次执行前的10步操作,代码可读性更高,后期修改次数也更方便
- 通过
global_step可以轻松跟踪全局的步数进度
示例场景:让run.sh运行20次
只需要简单修改参数即可:
- 方法一中,把
{1..100}改成{1..200},同时把run_count == 10改成run_count == 20 - 方法二中,把
total_runs=10改成total_runs=20
额外注意事项
- 确保
run.sh有可执行权限:执行chmod +x run.sh赋予运行权限 - 如果每一步的逻辑是耗时操作,脚本会按顺序同步执行;若需要并行处理,可以在操作后加
&(但要注意系统资源占用)
内容的提问来源于stack exchange,提问作者yael




