💜 想真正擅长编程? 从一门课程开始,100% 免费

第4节:条件判断与流程控制

一、知识讲解

1. 条件判断的基本语法

在 Shell 中,条件判断用于控制程序执行的分支。 常见形式:

Shell
[ condition ]
[[ condition ]]
test condition

✅ 推荐使用 [[ ]],语法更安全且支持更多操作符。 注意:方括号内外必须有空格!

示例:

Shell
if [ $USER = "root" ]
then
  echo "当前是管理员用户"
fi

2. 数值判断

操作符 含义
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于

示例:

Shell
num=10
if [ $num -gt 5 ]
then
  echo "num 大于 5"
fi

3. 字符串判断

操作符 含义
= 等于
!= 不等于
-z str 字符串为空(长度为0)
-n str 字符串非空

示例:

Shell
str="hello"
if [ -n "$str" ]
then
  echo "字符串非空"
fi

4. 文件判断

操作符 含义
-e 文件 文件是否存在
-f 文件 是否为普通文件
-d 目录 是否为目录
-r 文件 是否可读
-w 文件 是否可写
-x 文件 是否可执行

示例:

Shell
file="/etc/passwd"
if [ -e $file ]
then
  echo "文件存在"
fi

5. if...else 结构

单分支:

Shell
if condition
then
  command
fi

双分支:

Shell
if condition
then
  command1
else
  command2
fi

多分支:

Shell
if condition1
then
  command1
elif condition2
then
  command2
else
  command3
fi

6. case 语句

当有多个条件时,case 结构更清晰:

Shell
case $变量名 in
  值1)
    命令1
    ;;
  值2)
    命令2
    ;;
  *)
    默认命令
    ;;
esac

示例:

Shell
read -p "请输入星期几(1-7): " day
case $day in
  1) echo "星期一" ;;
  2) echo "星期二" ;;
  3) echo "星期三" ;;
  4) echo "星期四" ;;
  5) echo "星期五" ;;
  6) echo "星期六" ;;
  7) echo "星期日" ;;
  *) echo "输入无效" ;;
esac

7. 逻辑运算符

符号 含义
-a 逻辑与(and)
-o 逻辑或(or)
! 逻辑非(not)

示例:

Shell
if [ $num -gt 0 -a $num -lt 100 ]
then
  echo "num 在 0~100 之间"
fi

或使用 [[ ]] 逻辑运算:

Shell
if [[ $num -gt 0 && $num -lt 100 ]]
then
  echo "num 在 0~100 之间"
fi

二、示例代码

示例 1:判断当前用户

Shell
#!/bin/bash
if [ $USER = "root" ]
then
  echo "管理员用户"
else
  echo "普通用户"
fi

示例 2:判断文件是否存在

Shell
#!/bin/bash
file="/etc/passwd"

if [ -e $file ]
then
  echo "$file 存在"
else
  echo "$file 不存在"
fi

示例 3:判断成绩等级

Shell
#!/bin/bash
read -p "请输入成绩(0-100): " score

if [ $score -ge 90 ]
then
  echo "优秀"
elif [ $score -ge 70 ]
then
  echo "良好"
elif [ $score -ge 60 ]
then
  echo "及格"
else
  echo "不及格"
fi

示例 4:使用 case 实现菜单选择

Shell
#!/bin/bash
echo "请选择操作:"
echo "1. 显示时间"
echo "2. 显示当前路径"
echo "3. 显示当前用户"
read -p "请输入选项(1-3): " choice

case $choice in
  1) date ;;
  2) pwd ;;
  3) whoami ;;
  *) echo "无效选择" ;;
esac

三、课堂练习

🧩 练习 1:判断用户是否为 root 编写脚本 check_user.sh:

Shell
#!/bin/bash
if [ $USER = "root" ]
then
  echo "你是系统管理员。"
else
  echo "你不是 root 用户。"
fi

🧩 练习 2:判断文件类型 输入文件路径,判断它是“普通文件”“目录”或“不存在”。 提示:用 -f、-d、-e 组合判断。


🧩 练习 3:简易菜单 编写脚本 menu.sh,实现:

plain
1. 查看当前时间
2. 查看当前路径
3. 查看登录用户
4. 退出

用户输入数字后执行对应操作(使用 case)。


✅ 本节目标总结:

  • 掌握条件判断 [ ] / [[ ]] 语法
  • 熟悉数值、字符串、文件判断
  • 能编写含分支逻辑的 Shell 脚本