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,脚本就有了完整逻辑能力。