在 Shell 脚本开发中,条件判断是控制程序流程的核心机制之一。if else 语句作为 Shell 中最常用的条件判断结构,广泛用于判断文件是否存在、变量是否为空、命令执行是否成功等场景。掌握 if else 的语法结构和使用方式,是编写高效、健壮 Shell 脚本的关键技能。本文将详细介绍 Shell 中 if else 语句的基本格式、常见用法,并结合多个实际示例,帮助开发者快速上手并灵活应用这一基础但强大的控制结构。
Shell 中的 if else 语句用于根据条件执行不同的代码块,其基本语法如下:
if [ condition ]; then
# 条件为真时执行的命令
else
# 条件为假时执行的命令
fi
其中:
if 后的 [ condition ] 是判断条件,中括号是 test 命令的简写形式;
then 表示条件成立后要执行的代码块;
else 是可选部分,表示条件不成立时的执行逻辑;
fi 是 if 的结束标识,必须成对出现。
注意: 中括号 [] 与条件之间必须有空格,否则会报错。
单个 if 判断
只判断一个条件,不包含 else 分支:
if [ "$name" = "admin" ]; then
echo "欢迎管理员"
fi
if else 判断
二选一的判断结构:
if [ -f "file.txt" ]; then
echo "文件存在"
else
echo "文件不存在"
fi
if elif else 多条件判断
适用于多个条件分支的情况:
if [ "$score" -ge 90 ]; then
echo "优秀"
elif [ "$score" -ge 60 ]; then
echo "及格"
else
echo "不及格"
fi
嵌套 if 判断
在 if 或 else 块内部再嵌套 if 判断,实现更复杂的逻辑:
if [ "$age" -ge 18 ]; then
if [ "$gender" = "男" ]; then
echo "成年男性"
else
echo "成年女性"
fi
else
echo "未成年人"
fi
结合 test 命令使用
test 命令与 [ ] 等价,可以用于判断文件、字符串、数值等:
if test -d "/var/log"; then
echo "日志目录存在"
else
echo "日志目录不存在"
fi
使用双中括号 [[ ]] 提升安全性
在 bash 环境中,使用 [[ ]] 替代 [ ] 可以避免一些语法陷阱,如无需转义 <、> 等符号:
if [[ "$name" == "root" ]]; then
echo "当前用户是 root"
fi
使用命令执行结果作为判断条件
Shell 中的 if 语句也可以直接判断命令执行是否成功(返回值为 0 表示成功):
if ping -c 1 google.com > /dev/null; then
echo "网络连接正常"
else
echo "网络连接失败"
fi
在 if 语句中,判断条件可以是文件判断、数值比较、字符串判断等多种类型。
文件判断
-f file:判断是否为普通文件;
-d dir:判断是否为目录;
-e file:判断文件或目录是否存在;
-r file:判断文件是否可读;
-w file:判断文件是否可写;
-x file:判断文件是否可执行。
示例:
if [ -f "data.txt" ]; then
echo "data.txt 是一个文件"
fi
数值比较
-eq:等于;
-ne:不等于;
-lt:小于;
-le:小于等于;
-gt:大于;
-ge:大于等于。
示例:
if [ "$age" -ge 18 ]; then
echo "成年"
else
echo "未成年"
fi
字符串比较
=:字符串相等;
!=:字符串不相等;
-z:判断字符串是否为空;
-n:判断字符串是否非空。
示例:
if [ "$name" = "张三" ]; then
echo "欢迎张三"
else
echo "非张三用户"
fi
逻辑运算符
&&:逻辑与;
||:逻辑或;
!:逻辑非。
示例:
if [ "$age" -ge 18 ] && [ "$age" -le 60 ]; then
echo "年龄在18到60之间"
fiif [ -z "$input" ]; then
echo "输入为空"
fi
检查文件或目录是否存在
if [ -f "config.json" ]; then
echo "配置文件存在"
else
echo "配置文件缺失"
fi
判断命令是否执行成功
if grep "error" log.txt; then
echo "发现错误日志"
else
echo "未发现错误"
fi
参数判断
用于判断脚本传入的参数是否符合预期:
if [ -z "$1" ]; then
echo "缺少参数"
exit 1
fi
用户权限判断
判断当前用户是否为 root:
if [ "$(id -u)" -eq 0 ]; then
echo "当前为 root 用户"
else
echo "当前为普通用户"
fi
路径判断
判断路径是否存在并创建:
if [ ! -d "/data/logs" ]; then
mkdir -p /data/logs
echo "日志目录已创建"
fi
多条件判断
多个条件组合判断:
if [ "$age" -ge 18 ] && [ "$gender" = "男" ]; then
echo "成年男性"
fi
结合 case 语句使用
if 与 case 可以配合使用,实现更复杂的逻辑:
if [ "$status" -eq 1 ]; then
echo "任务进行中"
else
case "$status" in
2) echo "任务完成" ;;
3) echo "任务失败" ;;
*) echo "未知状态" ;;
esac
fi
判断命令是否存在
用于判断某个命令是否安装:
if command -v curl > /dev/null; then
echo "curl 已安装"
else
echo "curl 未安装"
fi
判断进程是否运行
判断某个服务是否运行:
if pgrep nginx > /dev/null; then
echo "Nginx 正在运行"
else
echo "Nginx 未运行"
fi
判断输入是否为空
read -p "请输入名称:" name
if [ -z "$name" ]; then
echo "不能为空"
else
echo "你输入的是:$name"
fi
判断两个文件是否相同
if diff file1.txt file2.txt > /dev/null; then
echo "两个文件内容一致"
else
echo "两个文件内容不同"
fi
判断脚本是否被正确调用
if [ $# -lt 1 ]; then
echo "用法:$0 <参数>"
exit 1
fi
判断变量是否为数字
if [[ "$input" =~ ^[0-9]+$ ]]; then
echo "输入是数字"
else
echo "输入不是数字"
fi
判断用户输入是否为 Y/y/N/n
read -p "是否继续?(Y/N)" choice
if [ "$choice" = "Y" ] || [ "$choice" = "y" ]; then
echo "继续执行"
else
echo "退出操作"
fi
结合函数使用
将 if 与函数结合,提高脚本的模块化程度:
is_valid() {
[ "$1" -gt 0 ] && [ "$1" -le 100 ]
}
if is_valid "$score"; then
echo "成绩有效"
else
echo "成绩无效"
fi
if else 是 Shell 脚本中最基础、最常用的条件判断结构,它不仅支持简单的判断,还能通过 elif 实现多条件判断,结合 test、[[ ]]、正则表达式等,可以实现复杂的逻辑控制。
声明:所有来源为“澳门太阳集团城网址8722”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com
通过出发地、目的地、出发日期等信息查询航班信息。
通过站到站查询火车班次时刻表等信息,同时已集成至太阳集团城8722MCP Server。火车票订票MCP不仅能赋予你的Agent火车时刻查询,还能支持在线订票能力。
通过车辆vin码查询车辆的过户次数等相关信息
验证银行卡、身份证、姓名、手机号是否一致并返回账户类型
查询个人是否存在高风险行为