在 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 "欢迎管理员"
fiif else 判断
二选一的判断结构:
if [ -f "file.txt" ]; then
echo "文件存在"
else
echo "文件不存在"
fiif 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、[[ ]]、正则表达式等,可以实现复杂的逻辑控制。
声明:所有来源为“聚合数据”的内容信息,未经本网许可,不得转载!如对内容有异议或投诉,请与我们联系。邮箱:marketing@think-land.com
提供多种拟人音色,支持多语言及方言,并可在同一音色下输出多语言内容。系统可自适应语气,流畅处理复杂文本。
Nano Banana(gemini-2.5-flash-image 和 gemini-3-pro-image-preview图像模型)是图像生成与编辑的最佳选择,可集成 Nano Banana API,实现高速预览。
支持通过自然语言文本智能生成高质量短视频。用户只需输入一段描述性文字,即可自动合成画面连贯、风格鲜明、配乐匹配的定制化视频内容。适用于短视频创作、广告预演、社交内容生成、游戏素材制作等场景,为开发者与创作者提供高效、灵活、富有想象力的视频生产新范式。
先进的图像理解和分析能力,它能够快速准确地解析和理解图像内容。无论是自然风景、城市建筑还是复杂的场景与活动,都能提供详细的描述和深入的分析。
根据文本提示(prompt)和图片公网访问链接,编辑原图按照特定风格、场景和氛围感的输出新的图像。广泛应用于电商营销、广告设计、创意灵感等领域,为用户带来高效且个性化的AI图像创作体验。