Shell编程循环结构_新手必知3大类型_附实战避坑指南,Shell编程循环结构全解析,掌握三大类型,实战避坑指南

哎,各位脚本小白们!是不是每次看到满屏的do...done就头晕?别慌!今儿咱们就掰扯明白Shell编程里的循环结构,保准你学会之后写脚本跟玩贪吃蛇似的——想怎么绕就怎么绕!


一、循环江湖三大门派

​Shell脚本里有三大当家花旦​​:​​for循环​​、​​while循环​​和​​until循环​​。先上个对比表给大伙儿压压惊:

​循环类型​​适用场景​​核心特点​​翻车指数​
for已知次数的遍历像快递员挨家挨户送包裹★★☆
while条件满足时持续执行像永动机直到没油才停★★★
until条件不满足时持续执行像闹钟响了还要赖床的反骨仔★★★☆

举个栗子:你要是想批量创建100个用户账号,​​for循环​​最合适;监控服务器内存不足自动重启服务,得用​​while循环​​;而​​until循环​​嘛...适合等老板说"今天不加班"才下班(懂的都懂)。


二、for循环:最接地气的劳模

​基础语法长这样​​:

shell复制
for 变量 in 列表do你的骚操作done

​实战案例三连击​​:

  1. ​数字快递员​​(送1到5号包裹):

    shell复制
    for i in {1..5}doecho "正在处理第$i个任务"done

    里提到的{1..5}展开式,比写1 2 3 4 5优雅多了!

  2. ​文件大扫除​​(清空所有.log文件):

    shell复制
    for file in *.logdo> "$file"done

    这里用到了通配符*,跟Windows搜索似的方便

  3. ​类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

​三大魔性用法​​:

  1. ​等文件出现才干活​​:

    shell复制
    until [ -f /tmp/重要文件.lock ]doecho "文件还没生成,睡5秒再说..."sleep 5done

    这个在里被戏称为"脚本界的望夫石"

  2. ​网络重连小强​​:

    shell复制
    until ping -c1 www.baidu.com &>/dev/nulldoecho "断网了!1分钟后重试"sleep 60done

    适合总被甲方拔网线的苦命程序员

  3. ​反向计数器​​:

    shell复制
    count=10until ((count < 0))doecho "倒计时:$count"((count--))done

    比while循环少写个感叹号,强迫症福音


五、避坑指南(血泪经验)

​新手必看三不要​​:

  1. ​不要用错判断符号​​:[ ]里必须留空格,写成[$i==5]直接报错
  2. ​不要忘记改变条件​​:while循环里忘了i++就是作 *** 循环
  3. ​不要乱用无限循环​​:测试脚本时务必加超时退出,别问我怎么知道的

​性能优化两板斧​​:

  • ​减少循环次数​​:能一次处理就别分两次,像批量操作用xargs更高效
  • ​慎用管道符​​:for i in $(seq 100){1..100}多耗0.01秒

​个人叨逼叨​
要我说啊,循环这玩意儿就跟炒菜的火候似的——​​for循环像电磁炉​​,定好时间自动关火;​​while循环像煤气灶​​,得时刻盯着别烧糊;​​until循环像微波炉​​,不到设定温度绝不罢休。最后送句大实话:​​能用for就别用while,循环次数未知再请until​​!各位看官要是把循环玩明白了,写脚本绝对比刷短视频还上瘾!