Linux Shell中的if-else语句是脚本编程中控制流程的核心工具,它允许程序根据条件判断执行不同的代码分支,从而实现自动化任务的逻辑处理,本文将深入探讨if-else语句的语法结构、使用场景、最佳实践及常见技巧,帮助读者掌握这一关键技能。

if-else语句的基本语法
在Linux Shell中,if-else语句的基本结构以if开头,后跟条件判断,通过then定义执行分支,else处理不满足条件的情况,基础语法如下:
if [ condition ]; then
# 条件为真时执行的命令
command1
command2
else
# 条件为假时执行的命令
command3
command4
fi
condition是测试条件,通常使用test命令或[](等同于test)进行判断,判断文件是否存在:
if [ -f "/etc/passwd" ]; then
echo "文件存在"
else
echo "文件不存在"
fi
条件判断的类型
Shell中的条件判断主要分为以下几类,通过不同的测试操作符实现:
文件测试
用于检查文件的状态,常用操作符如下:
| 操作符 | 功能示例 |
|——–|———-|
| -e | 测试文件是否存在 |
| -f | 测试是否为普通文件 |
| -d | 测试是否为目录 |
| -r | 测试文件是否可读 |
| -w | 测试文件是否可写 |
| -x | 测试文件是否可执行 |
示例:检查目录是否可写
if [ -w "/tmp" ]; then
echo "目录可写"
else
echo "目录不可写"
fi
字符串测试
用于比较字符串,常见操作符包括:
| 操作符 | 功能 |
|——–|——|
| | 字符串相等 |
| | 字符串不等 |
| -z | 字符串长度为0 |
| -n | 字符串长度非0 |

示例:判断用户输入是否为空
read -p "请输入内容: " input
if [ -z "$input" ]; then
echo "输入不能为空"
else
echo "输入内容: $input"
fi
数值比较
用于比较整数值,需使用-eq、-gt等操作符:
| 操作符 | 含义 |
|——–|——|
| -eq | 等于 |
| -ne | 不等于 |
| -gt | 大于 |
| -lt | 小于 |
| -ge | 大于等于 |
| -le | 小于等于 |
示例:比较两个数字大小
num1=10
num2=20
if [ $num1 -gt $num2 ]; then
echo "$num1 大于 $num2"
else
echo "$num1 小于或等于 $num2"
fi
多分支判断:elif的使用
当需要处理多个条件时,可以使用elif(else if)扩展判断逻辑:
if [ condition1 ]; then
command1
elif [ condition2 ]; then
command2
else
command3
fi
示例:根据分数评定等级
read -p "请输入分数(0-100): " score
if [ $score -ge 90 ]; then
echo "优秀"
elif [ $score -ge 80 ]; then
echo "良好"
elif [ $score -ge 60 ]; then
echo "及格"
else
echo "不及格"
fi
逻辑运算符的组合
通过-a(与)、-o(或)、(非)可以组合多个条件:

if [ condition1 -a condition2 ]; then # 条件1且条件2为真
command
elif [ condition1 -o condition2 ]; then # 条件1或条件2为真
command
else
command
fi
示例:检查文件是否为可读写的普通文件
if [ -f "$file" -a -r "$file" -a -w "$file" ]; then
echo "文件是可读写的普通文件"
else
echo "文件不符合条件"
fi
嵌套if-else语句
在复杂逻辑中,可以嵌套使用if-else语句,但需注意缩进和fi的匹配:
if [ condition1 ]; then
if [ condition2 ]; then
command1
else
command2
fi
else
command3
fi
示例:检查用户权限和文件存在性
if [ "$(whoami)" = "root" ]; then
if [ -f "/etc/shadow" ]; then
echo "root用户且shadow文件存在"
else
echo "root用户但shadow文件不存在"
fi
else
echo "非root用户"
fi
最佳实践与注意事项
- 条件表达式需加引号:避免变量为空或包含空格时出错,例如
[ -n "$var" ]。 - 使用
[[ ]]替代[ ]:[[ ]]支持正则匹配和更灵活的逻辑运算,是Bash推荐的写法。 - 避免命令混淆:
[ ]内部使用-lt等数值操作符,外部命令比较需使用expr或。 - 注释与缩进:合理注释和缩进可提高脚本可读性,尤其在嵌套结构中。
实际应用案例
案例1:检查系统磁盘使用率
disk_usage=$(df / | awk 'NR==2 {print $5}' | tr -d '%')
if [ $disk_usage -gt 80 ]; then
echo "警告:磁盘使用率超过80%"
else
echo "磁盘使用率正常"
fi
案例2:批量处理文件
for file in *.txt; do
if [ -f "$file" ]; then
mv "$file" "processed_${file}"
echo "已处理: $file"
else
echo "文件不存在: $file"
fi
done
Linux Shell中的if-else语句是脚本逻辑控制的基石,通过灵活运用文件、字符串、数值测试及逻辑运算符,可以实现复杂的自动化任务,掌握其语法结构和最佳实践,不仅能提升脚本的健壮性,还能显著提高问题解决效率,在实际开发中,建议结合case语句、循环结构等进一步扩展脚本的逻辑能力,从而编写出高效、可维护的Shell脚本。



















