Shell脚本详解:判断
一、基础判断语句 if...then...fi
Shell 中最基本的判断结构是 if...then...fi。
语法:
bash
if [ 条件 ]
then
# 条件成立时执行的代码
fi
关键点:
[ 条件 ]是测试语句,注意括号[和]两边必须有空格。then必须单独一行,或与if用分号;分隔。fi表示条件语句结束。
示例 1:检查文件是否存在
bash
#!/bin/bash
file="test.txt"
if [ -e "$file" ]
then
echo "$file 存在"
fi
二、多重判断(嵌套 if)
当需要处理多个条件时,可以使用 elif 和嵌套 if。
语法:
bash
if [ 条件1 ]
then
# 条件1成立
elif [ 条件2 ]
then
# 条件2成立
else
# 以上都不成立
fi
示例 2:成绩分级
bash
#!/bin/bash
read -p "请输入成绩: " score
if [ "$score" -ge 90 ]
then
echo "优秀"
elif [ "$score" -ge 80 ]
then
echo "良好"
elif [ "$score" -ge 60 ]
then
echo "及格"
else
echo "不及格"
fi
三、复杂条件组合
使用 &&(逻辑与)、||(逻辑或)组合多个条件。
示例 3:检查文件类型
bash
#!/bin/bash
file="example"
if [ -e "$file" ] && [ -f "$file" ]
then
echo "$file 是普通文件"
elif [ -e "$file" ] && [ -d "$file" ]
then
echo "$file 是目录"
else
echo "$file 不存在"
fi
四、case 语句(多分支选择)
case 是处理多重匹配的更简洁方式。
语法:
bash
case 变量 in
模式1)
命令...
;;
模式2)
命令...
;;
*)
默认命令...
;;
esac
示例 4:服务管理脚本
bash
#!/bin/bash
read -p "操作(start/stop/restart): " action
case "$action" in
start)
echo "启动服务..."
;;
stop)
echo "停止服务..."
;;
restart)
echo "重启服务..."
;;
*)
echo "无效操作"
;;
esac
五、常见条件判断类型
| 类型 | 写法 | 说明 |
|---|---|---|
| 文件检测 | -e file |
文件是否存在 |
-d dir |
是否是目录 | |
-f file |
是否是普通文件 | |
| 字符串比较 | "str1" = "str2" |
字符串相等 |
"str1" != "str2" |
字符串不等 | |
-z "$str" |
字符串为空 | |
| 数值比较 | num1 -eq num2 |
等于 |
num1 -gt num2 |
大于 | |
num1 -lt num2 |
小于 |
六、综合实例:备份脚本
bash
#!/bin/bash
# 检查备份目录是否存在
backup_dir="/backup"
if [ ! -d "$backup_dir" ]
then
mkdir -p "$backup_dir" || echo "创建目录失败" && exit 1
fi
# 检查源文件
source_file="/data/app.log"
if [ ! -f "$source_file" ]
then
echo "源文件不存在"
exit 1
fi
# 执行备份
cp "$source_file" "$backup_dir/app.log.$(date +%Y%m%d)" && echo "备份成功" || echo "备份失败"
说明:
||和&&用于命令执行结果处理$(date +%Y%m%d)生成日期字符串- 多重条件组合确保流程可靠性
掌握这些判断结构后,您可以编写出健壮的 Shell 脚本处理各种条件分支任务。