Linux Shell 入门教程(四):流程控制与条件判断


上一节我们写了第一个 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
done

2. 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

六、练习题

推荐你亲手练习以下脚本:

  1. 判断当前用户是否是 root
  2. 输入一个数字,判断是奇数还是偶数
  3. 用户输入成绩,输出等级(优秀、良好、及格、不及格)
  4. 写一个菜单脚本,输入 1 安装软件、2 卸载软件、3 退出

七、小结

控制结构

用途

if/else

条件判断

case

多分支条件

for、while

循环处理

break/continue

控制循环流程

这些结构,是 Shell 脚本“编程性”的核心能力。


下一篇预告:

Linux Shell 入门教程(五):Shell 函数与脚本模块化编程

我们将学习如何定义和调用 Shell 函数、提高脚本可重用性和结构清晰度。

原文链接:,转发请注明来源!