Shell if 语句小白完全指南
一、if 判断逻辑运算符详解(对应你书上的内容)
1. 文件 / 目录判断(最常用)
表格
| 运算符 | 作用 | 示例 |
|---|---|---|
-f |
判断文件是否存在 | if [ -f "test.txt" ]; then |
-d |
判断目录是否存在 | if [ -d "/var/log" ]; then |
2. 整数比较(数字判断)
表格
| 运算符 | 作用 | 示例 |
|---|---|---|
-eq |
等于(equal) | if [ $a -eq $b ]; then |
-ne |
不等于(not equal) | if [ $a -ne $b ]; then |
-lt |
小于(less than) | if [ $a -lt 10 ]; then |
-gt |
大于(greater than) | if [ $a -gt 10 ]; then |
-le |
小于等于(less equal) | if [ $a -le 10 ]; then |
-ge |
大于等于(greater equal) | if [ $a -ge 10 ]; then |
3. 逻辑运算符(多个条件组合)
表格
| 运算符 | 作用 | 示例 | ||||
|---|---|---|---|---|---|---|
-a |
逻辑与(and,双方都成立) | if [ $a -gt 5 -a $a -lt 10 ]; then |
||||
-o |
逻辑或(or,单方成立即可) | if [ $a -lt 5 -o $a -gt 10 ]; then |
||||
&& |
逻辑与(和-a效果一样,更常用) |
if [ $a -gt 5 ] && [ $a -lt 10 ]; then |
||||
| ` | ` | 逻辑或(和-o效果一样,更常用) |
`if [ $a -lt 5 ] | [ $a -gt 10 ]; then` |
4. 字符串判断
表格
| 运算符 | 作用 | 示例 |
|---|---|---|
-z |
判断字符串是否为空 | if [ -z "$name" ]; then |
二、if 语句的基本结构
Shell 里
if 有三种常见结构,记住格式就不会写错:1. 单分支结构(只有 “成立” 的情况)
bash
运行
if [ 条件判断 ]; then# 条件成立时执行的代码echo "条件成立啦!"
fi
2. 双分支结构(成立 / 不成立两种情况)
bash
运行
if [ 条件判断 ]; then# 条件成立时执行echo "条件成立"
else# 条件不成立时执行echo "条件不成立"
fi
3. 多分支结构(多个条件判断)
bash
运行
if [ 条件1 ]; thenecho "条件1成立"
elif [ 条件2 ]; thenecho "条件2成立"
elseecho "所有条件都不成立"
fi
三、实操脚本(可直接复制运行)
下面给你 3 个常用场景的脚本,直接复制到
.sh 文件里运行就能看到效果。实操 1:文件 / 目录判断脚本
bash
运行
#!/bin/bash
# 检查文件和目录是否存在# 定义要检查的文件和目录
file="test.txt"
dir="/tmp/test_dir"# 检查文件是否存在
if [ -f "$file" ]; thenecho "✅ 文件 $file 存在"
elseecho "❌ 文件 $file 不存在,创建它..."touch $file
fi# 检查目录是否存在
if [ -d "$dir" ]; thenecho "✅ 目录 $dir 存在"
elseecho "❌ 目录 $dir 不存在,创建它..."mkdir -p $dir
fi
运行方式:
bash
运行
chmod +x check_file.sh
./check_file.sh
实操 2:数字判断脚本(整数比较)
bash
运行
#!/bin/bash
# 数字判断:判断用户输入的数字大小echo "请输入一个数字:"
read num # 读取用户输入的数字if [ -z "$num" ]; thenecho "❌ 输入不能为空!"exit 1 # 退出脚本,状态码1表示错误
fi# 判断数字大小
if [ $num -lt 10 ]; thenecho "你输入的数字 $num 小于10"
elif [ $num -eq 10 ]; thenecho "你输入的数字 $num 等于10"
elseecho "你输入的数字 $num 大于10"
fi
运行方式:
bash
运行
chmod +x judge_num.sh
./judge_num.sh
实操 3:多条件组合判断脚本(逻辑与 / 或)
bash
运行
#!/bin/bash
# 多条件判断:判断数字是否在 5-10 之间,或者小于0echo "请输入一个数字:"
read num# 逻辑与:数字大于5 且 小于10
if [ $num -gt 5 ] && [ $num -lt 10 ]; thenecho "✅ 数字 $num 在 5-10 之间"
# 逻辑或:数字小于0 或者 大于10
elif [ $num -lt 0 ] || [ $num -gt 10 ]; thenecho "⚠️ 数字 $num 不在 0-10 范围内"
elseecho "ℹ️ 数字 $num 等于 0、5 或 10"
fi
运行方式:
bash
运行
chmod +x multi_judge.sh
./multi_judge.sh
四、新手避坑指南(必看!)
-
方括号
[ ]前后必须有空格错误:if [-f test.txt]; then正确:if [ -f test.txt ]; then -
变量比较时,建议用双引号括起来比如
[ -z "$name" ],防止变量为空时报错 -
整数比较只能用
-eq/-ne/-lt/-gt,不能用==/!=/</>错误:if [ $a == $b ]; then(字符串比较用==,整数用-eq)正确:if [ $a -eq $b ]; then -
逻辑与 / 或:
&&/||要和if搭配使用时,要分开写判断推荐写法:if [ 条件1 ] && [ 条件2 ]; then不推荐:if [ 条件1 -a 条件2 ]; then(兼容性差)
