Shell编程循环结构_新手必知3大类型_附实战避坑指南,Shell编程循环结构全解析,掌握三大类型,实战避坑指南
哎,各位脚本小白们!是不是每次看到满屏的do...done就头晕?别慌!今儿咱们就掰扯明白Shell编程里的循环结构,保准你学会之后写脚本跟玩贪吃蛇似的——想怎么绕就怎么绕!
一、循环江湖三大门派
Shell脚本里有三大当家花旦:for循环、while循环和until循环。先上个对比表给大伙儿压压惊:
循环类型 | 适用场景 | 核心特点 | 翻车指数 |
---|---|---|---|
for | 已知次数的遍历 | 像快递员挨家挨户送包裹 | ★★☆ |
while | 条件满足时持续执行 | 像永动机直到没油才停 | ★★★ |
until | 条件不满足时持续执行 | 像闹钟响了还要赖床的反骨仔 | ★★★☆ |
举个栗子:你要是想批量创建100个用户账号,for循环最合适;监控服务器内存不足自动重启服务,得用while循环;而until循环嘛...适合等老板说"今天不加班"才下班(懂的都懂)。
二、for循环:最接地气的劳模
基础语法长这样:
shell复制for 变量 in 列表do你的骚操作done
实战案例三连击:
数字快递员(送1到5号包裹):
shell复制
for i in {1..5}doecho "正在处理第$i个任务"done
里提到的
{1..5}
展开式,比写1 2 3 4 5
优雅多了!文件大扫除(清空所有.log文件):
shell复制
for file in *.logdo> "$file"done
这里用到了通配符
*
,跟Windows搜索似的方便类C风格装逼版:
shell复制
for ((i=1; i<; i++))doecho "第$i次尝试登录"done
这种写法在里被称为"程序员的仪式感",适合强迫症患者
三、while循环:永动机的诱惑
基本套路看这里:
shell复制while 条件测试do你的骚操作done
经典翻车现场:
内存监控小能手:
shell复制
while [[ $(free -m | awk '/Mem/{print $4}') -lt 500 ]]doecho "内存不足500MB,自动清理缓存!"sync && echo 3 > /proc/sys/vm/drop_cachessleep 60done
这个在里被称作"运维保命神器",但千万别手滑写成
while true
*** 循环!用户输入读心术:
shell复制
read -p "输入quit才能退出:" inputwhile [[ "$input" != "quit" ]]doread -p "再说一遍?" inputdone
这就是传说中的"你猜我猜不猜"游戏脚本版
四、until循环:反向操作的杠精
语法结构反着来:
shell复制until 条件测试do你的骚操作done
三大魔性用法:
等文件出现才干活:
shell复制
until [ -f /tmp/重要文件.lock ]doecho "文件还没生成,睡5秒再说..."sleep 5done
这个在里被戏称为"脚本界的望夫石"
网络重连小强:
shell复制
until ping -c1 www.baidu.com &>/dev/nulldoecho "断网了!1分钟后重试"sleep 60done
适合总被甲方拔网线的苦命程序员
反向计数器:
shell复制
count=10until ((count < 0))doecho "倒计时:$count"((count--))done
比while循环少写个感叹号,强迫症福音
五、避坑指南(血泪经验)
新手必看三不要:
- 不要用错判断符号:
[ ]
里必须留空格,写成[$i==5]
直接报错 - 不要忘记改变条件:while循环里忘了
i++
就是作 *** 循环 - 不要乱用无限循环:测试脚本时务必加超时退出,别问我怎么知道的
性能优化两板斧:
- 减少循环次数:能一次处理就别分两次,像批量操作用
xargs
更高效 - 慎用管道符:
for i in $(seq 100)
比{1..100}
多耗0.01秒
个人叨逼叨
要我说啊,循环这玩意儿就跟炒菜的火候似的——for循环像电磁炉,定好时间自动关火;while循环像煤气灶,得时刻盯着别烧糊;until循环像微波炉,不到设定温度绝不罢休。最后送句大实话:能用for就别用while,循环次数未知再请until!各位看官要是把循环玩明白了,写脚本绝对比刷短视频还上瘾!