Shell 流程控制

流程控制决定脚本「先做什么、重复做什么、按条件选做什么」。Shell 与多数语言不同:if 用 fi 收尾、case 用 esac 收尾,格式上更讲究。

if else 判断

基本语法:if 条件; then ... elif ... else ... fi:

#!/bin/bash
score=85
if [ $score -ge 90 ]; then
    echo "优秀"
elif [ $score -ge 60 ]; then
    echo "及格"
else
    echo "不及格"
fi
# 输出:及格

for 循环

for 遍历一组值,循环体用 do...done 包裹;{1..5} 生成序列:

for fruit in 苹果 香蕉 橘子; do
    echo "水果:$fruit"
done
# 输出:苹果 / 香蕉 / 橘子
for i in {1..3}; do
    echo "第 $i 次"
done
# 输出:第 1 次 / 第 2 次 / 第 3 次

while 与 until 循环

while 条件成立就一直执行;until 相反,条件不成立时才循环:

i=1
while [ $i -le 3 ]; do
    echo "计数:$i"
    i=$((i + 1))    # 算术运算
done
# 输出:计数 1 / 2 / 3
i=3
until [ $i -lt 1 ]; do
    echo "倒计时 $i"
    i=$((i - 1))
done
# 输出:倒计时 3 / 2 / 1

case 多分支

case 相当于多重 if;| 表示「或」,*) 是默认分支,;; 结束当前分支:

day=周六
case $day in
    周六|周日) echo "休息日" ;;
    周五)      echo "明天休息" ;;
    *)         echo "工作日" ;;
esac
# 输出:休息日

break 与 continue

break 跳出整个循环,continue 跳过本次进入下一次:

for i in {1..5}; do
    [ $i -eq 3 ] && break      # i=3 中断
    echo "i=$i"
done
# 输出:i=1 / i=2
for i in {1..4}; do
    [ $i -eq 2 ] && continue   # 跳过 i=2
    echo "i=$i"
done
# 输出:i=1 / i=3 / i=4

小结

Shell 流程控制记住配对关键字:if 配 fi、case 配 esac、for/while 用 do...done。条件交给 [ ],循环控制交给 break/continue,脚本就有了完整逻辑能力。

笔记加载中…