昨天Day14我们入门了Shell脚本变量、判断、基础语法。
只会判断还不够,真正的自动化,全靠循环!
运维工作中:
批量创建文件、批量改名、批量解压、批量清理日志、批量检测服务、批量备份……
所有“重复100次的工作”,全部交给循环!
Day15带你吃透两大核心循环:for循环、while循环
学完今天,你彻底告别手动重复操作,具备初级自动化运维能力!
一、今日学习目标
✅ 掌握 for 循环:固定次数、遍历文件、遍历列表
✅ 掌握 while 循环:条件循环、无限循环监控
✅ 学会批量创建/删除文件、用户、目录
✅ 掌握脚本批量处理日志、批量重命名实战
✅ 写出可直接上线使用的自动化小工具
二、for循环(工作最高频)
适用场景:已知次数、已知文件列表、批量操作
1、基础数字循环
bash
#!/bin/bash
for i in {1..5}
do
echo "当前循环次数:$i"
done
含义:循环输出1到5
2、遍历目录所有文件
bash
#!/bin/bash
for file in `ls /home`
do
echo "发现文件:$file"
done
3、批量创建10个测试文件
bash
#!/bin/bash
for i in {1..10}
do
touch test_$i.txt
done
三、while循环(条件循环神器)
适用场景:不确定次数、持续监控、无限循环巡检
1、基础while条件循环
bash
#!/bin/bash
a=1
while [ $a -le 5 ]
do
echo "循环计数:$a"
a=$((a+1))
done
2、无限循环(服务器监控必备)
bash
#!/bin/bash
while true
do
echo "持续监控中……"
sleep 2
done
sleep 2:暂停2秒,防止CPU跑满
四、循环搭配if判断(企业标准组合)
90%实用脚本 = for/while + if
实战:批量判断文件是否存在
bash
#!/bin/bash
for file in test1.txt test2.txt test3.txt
do
if [ -f $file ];then
echo "$file 存在"
else
echo "$file 不存在,自动创建"
touch $file
fi
done
五、四大企业级循环实战脚本(直接复用)
实战1:批量创建用户
bash
#!/bin/bash
for user in user01 user02 user03
do
useradd $user
echo "123456" | passwd --stdin $user
done
实战2:批量清空目录日志
bash
#!/bin/bash
for log in `ls /var/log/*.log`
do
> $log
done
实战3:批量修改文件后缀
bash
#!/bin/bash
for file in *.txt
do
mv $file ${file%.txt}.bak
done
实战4:while实时检测Nginx状态
bash
#!/bin/bash
while true
do
if [ `ps -ef |grep nginx|grep -v grep|wc -l` -eq 0 ];then
echo "Nginx已宕机,尝试重启"
systemctl restart nginx
fi
sleep 3
done
六、循环脚本避坑指南(新手必看)
1. for循环遍历文件不要带特殊空格文件名,容易错乱
2. while无限循环必须加 sleep,否则CPU100%
3. 循环内部路径全部用绝对路径
4. 批量删除脚本,一定要先echo预览再执行
5. 循环变量空格必须严格,[]左右必须空格
七、今日实操作业(必敲一遍)
bash
# 1.批量创建5个文件
vim cycle.sh
#!/bin/bash
for i in {1..5}
do
touch day15_$i.txt
echo "创建成功:day15_$i.txt"
done
# 2.授权运行
chmod +x cycle.sh
./cycle.sh
八、今日知识点总结
1. for循环:适合批量、固定次数、遍历文件
2. while循环:适合持续监控、无限巡检
3. 循环+判断,构成90%自动化运维脚本
4. 可实现批量建用户、批量改文件、批量清日志、服务自启监控
5. 学完循环,真正脱离纯手动运维,迈入自动化阶段
遇到问题欢迎评论区留言探讨,关注账号,持续输出运维干货。