行者孙Python

绝技三"自动化内功"-Day39|循环往复:脚本循环与实战

📖 知识点

1. for 循环(数多少次 / 遍历列表)

 

for 变量 in 值1 值2 值3; do
    循环体
done

 

#!/bin/bash
for i in 1 2 3 4 5; do
    echo "第 $i 次"
done

 

for 把每个值依次赋给 i,每赋值一次执行一次循环体,最后 done 结束。输出 "第 1 次" 到 "第 5 次"。

2. 用 for 处理文件(最实用)

结合 ls/find,对每个文件执行操作:

 

#!/bin/bash
for f in *.txt; do
    echo "处理文件:$f"
    cat "$f"
done

 

*.txt 匹配当前目录所有 txt 文件,对每个都执行循环体。批量处理文件的神技。

3. while 循环(条件成立就重复)

 

while [ 条件 ]; do
    循环体
done

 

#!/bin/bash
n=1
while [ $n -le 5 ]; do   # n <= 5 就一直循环
    echo "第 $n 次"
    n=$((n+1))           # 数字加1,防止死循环
done

 

while 条件成立就循环,条件不成立就停。一定要让条件 "会变化"(如 n 递增),否则死循环。

4. 完整示例(批量备份)

 

#!/bin/bash
mkdir -p 备份
for f in *.txt; do
    cp "$f" 备份/
    echo "已备份:$f"
done
echo "全部备份完成!"

 

⚠️ 易错提醒

  1. for ... in ...; do ... done:do 前有分号 ;,结束用 done

  2. while 循环要让条件能变化(如 n=$((n+1))),否则死循环

  3. 文件变量用引号 "$f" 包起来,文件名带空格时更安全

⚔️ Kata 实战任务

任务需求:

  1. 回家,创建几个 txt 文件(touch a.txt b.txt c.txt)

  2. 用 vim 写一个 备份.sh:用 for 循环遍历所有.txt,复制到 "备份" 目录并打印

  3. 运行脚本,观察对每个文件执行了循环

  4. 用 ls 验证备份目录里文件都到位

参考代码(在终端依次敲)

 

# 准备几个文件
cd ~
touch a.txt b.txt c.txt

# 1. 创建循环备份脚本
vim 备份.sh
#   内容:
#   #!/bin/bash
#   mkdir -p 备份
#   for f in *.txt; do
#       cp "$f" 备份/
#       echo "已备份:$f"
#   done
#   echo "全部备份完成!"
#   (:wq 保存退出)

# 2. 运行脚本
bash 备份.sh

# 3. 验证备份结果
ls 备份

 

运行示例:

 

user@linux:~$ bash 备份.sh
已备份:a.txt
已备份:b.txt
已备份:c.txt
全部备份完成!
user@linux:~$ ls 备份
a.txt  b.txt  c.txt

 

💡 观察:脚本用 for f in *.txt 自动遍历 3 个 txt 文件,每个都执行 "复制 + 打印",一次循环搞定全部备份。不用手动复制三遍。

🧠 思考题

  1. for f in *.txt; do ... done 里,f 会依次等于什么?循环执行了几次?

  2. while 循环和 for 循环的区别是什么?while 循环为什么要注意防止 "死循环"?

‹ 返回目录
🏠首页 Python 📦资源 👤关于我