一、知识讲解
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 脚本