上一节我们写了第一个 Shell 脚本,学会了如何使用变量、读取输入和传参。本篇我们将继续深入,学习 Shell 的“核心能力”:流程控制。
Shell 支持类似其他编程语言的控制结构:条件判断、循环、分支等,使你可以编写更灵活的脚本。
一、条件判断:if / else
基本语法:
if [ 条件 ]
then
命令
fi示例:
#!/bin/bash
if [ -f "test.txt" ]; then
echo "文档存在"
else
echo "文档不存在"
fi常见条件判断运算符:
类型 | 表达式 | 含义 |
文件测试 | -f file | 是否是普通文件 |
文件测试 | -d dir | 是否是目录 |
字符串 | -z str | 是否为空字符串 |
字符串 | str1 = str2 | 是否相等 |
整数 | -eq -ne -lt -le -gt -ge | 等于、不等于、小于等 |
示例:判断用户输入是否为空
read -p "请输入用户名: " name
if [ -z "$name" ]; then
echo "用户名不能为空!"
else
echo "欢迎你,$name"
fi二、多分支:if / elif / else
#!/bin/bash
read -p "请输入分数: " score
if [ $score -ge 90 ]; then
echo "优秀"
elif [ $score -ge 60 ]; then
echo "及格"
else
echo "不及格"
fi三、case 语句:多选判断更优雅
适合判断固定值的情况,如菜单、参数等。
#!/bin/bash
read -p "请输入操作(start/stop/restart): " cmd
case "$cmd" in
start)
echo "服务启动中..."
;;
stop)
echo "服务停止中..."
;;
restart)
echo "服务重启中..."
;;
*)
echo "未知命令"
;;
esac说明:
- ;; 表示每个分支结束
- * 表示默认匹配
四、循环结构
1. for 循环
for i in 1 2 3 4 5
do
echo "数字: $i"
done也可以写成:
for ((i=1; i<=5; i++))
do
echo "第 $i 次循环"
done示例:批量创建文件
for i in {1..5}
do
touch file_$i.txt
done2. while 循环
i=1
while [ $i -le 5 ]
do
echo "计数:$i"
i=$((i+1))
done示例:用户输入直到输入 exit
while true
do
read -p "输入(exit退出): " input
if [ "$input" = "exit" ]; then
break
fi
echo "你输入了: $input"
done五、循环控制命令
命令 | 作用 |
break | 退出当前循环 |
continue | 跳过当前循环的剩余部分,继续下一次循环 |
示例:跳过偶数
for i in {1..5}
do
if [ $((i % 2)) -eq 0 ]; then
continue
fi
echo "奇数: $i"
done六、练习题
推荐你亲手练习以下脚本:
- 判断当前用户是否是 root
- 输入一个数字,判断是奇数还是偶数
- 用户输入成绩,输出等级(优秀、良好、及格、不及格)
- 写一个菜单脚本,输入 1 安装软件、2 卸载软件、3 退出
七、小结
控制结构 | 用途 |
if/else | 条件判断 |
case | 多分支条件 |
for、while | 循环处理 |
break/continue | 控制循环流程 |
这些结构,是 Shell 脚本“编程性”的核心能力。
下一篇预告:
Linux Shell 入门教程(五):Shell 函数与脚本模块化编程
我们将学习如何定义和调用 Shell 函数、提高脚本可重用性和结构清晰度。
