👨⚕️ 主页: gis分享者
👨⚕️ 感谢各位大佬 点赞👍 收藏⭐ 留言📝 加关注✅!
👨⚕️ 收录于专栏:Shell 面试

文章目录
- 一、🍀前言
-
- [1.1 ☘️基本示例](#1.1 ☘️基本示例)
- [1.2 ☘️使用语法](#1.2 ☘️使用语法)
- [1.3 ☘️知识扩展](#1.3 ☘️知识扩展)
一、🍀前言
在 Shell 脚本中,条件判断语句非常重要,主要用于控制程序流程。最常用的条件判断语句有 if、elif、else 和 case。这些语句允许我们根据不同的条件执行不同的代码块。
1.1 ☘️基本示例
powershell
#!/bin/bash
read -p "请输入一个数字: " num
if [ $num -gt 10 ]; then
echo "数字大于10"
elif [ $num -eq 10 ]; then
echo "数字等于10"
else
echo "数字小于10"
fi
我们可以看到使用 [ 条件 ] 来进行判断,并用 then 来引导要执行的命令,最后用 fi 结束 if 语句。
case 语句则用于多重分支条件判断:
powershell
#!/bin/bash
read -p "请输入一个选择 (a/b/c): " choice
case $choice in
a)
echo "你选择了a"
;;
b)
echo "你选择了b"
;;
c)
echo "你选择了c"
;;
*)
echo "无效选择"
;;
esac
1.2 ☘️使用语法
一、基本语法
- if-then-fi 基础结构
powershell
if [ 条件 ]
then
# 条件为真时执行的代码
fi
- 带 else 的分支
powershell
if [ 条件 ]; then
# 条件为真时执行
else
# 条件为假时执行
fi
- 多分支 (elif)
powershell
if [ 条件1 ]; then
# 条件1为真时执行
elif [ 条件2 ]; then
# 条件2为真时执行
else
# 所有条件均不满足时执行
fi
二、条件测试类型
- 字符串比较
| 操作符 | 说明 |
|---|---|
| "str1" = "str2" | 字符串相等 |
| "str1" != "str2" | 字符串不等 |
| -z "$str" | 字符串为空 |
| -n "$str" | 字符串非空 |
示例:
powershell
if [ "$var" = "hello" ]; then
echo "变量值为 hello"
fi
- 数值比较
| 操作符 | 说明 |
|---|---|
| num1 -eq num2 | 等于 (equal) |
| num1 -ne num2 | 不等于 (not equal) |
| num1 -gt num2 | 大于 (greater than) |
| num1 -lt num2 | 小于 (less than) |
| num1 -ge num2 | 大于等于 |
| num1 -le num2 | 小于等于 |
示例:
powershell
if [ $num -gt 10 ]; then
echo "数值大于 10"
fi
- 文件/目录测试
| 操作符 | 说明 |
|---|---|
| -e file | 文件/目录存在 |
| -f file | 是普通文件 |
| -d dir | 是目录 |
| -r file | 可读 |
| -w file | 可写 |
| -x file | 可执行 |
| -s file | 文件大小 >0 字节 |
示例:
powershell
if [ -f "/path/to/file.txt" ]; then
echo "文件存在且是普通文件"
fi
三、高级条件组合
- 逻辑运算符
AND 逻辑:&& 或 -a
powershell
if [ $num -gt 10 -a $num -lt 20 ]; then
echo "数值在 10~20 之间"
fi
或:
powershell
if [[ $num -gt 10 && $num -lt 20 ]]; then
echo "数值在 10~20 之间"
fi
OR 逻辑:|| 或 -o
powershell
if [ "$str" = "yes" -o "$str" = "y" ]; then
echo "输入了 yes 或 y"
fi
- case 语句(多条件分支)
powershell
case "$variable" in
pattern1)
# 匹配 pattern1 时执行
;;
pattern2|pattern3)
# 匹配 pattern2 或 pattern3 时执行
;;
*)
# 默认分支
;;
esac
示例:
powershell
case "$1" in
start)
echo "启动服务..."
;;
stop)
echo "停止服务..."
;;
*)
echo "用法: $0 {start|stop}"
exit 1
;;
esac
四、注意事项
空格要求
\] 或 \[\[ \]\] 内的条件必须与括号有空格分隔: ```powershell if [ $a -eq $b ]; then # 正确 if [$a -eq $b]; then # 错误! ``` 变量引号 变量建议用双引号包裹,避免空值或空格导致错误: ```powershell if [ -n "$var" ]; then # 正确 if [ -n $var ]; then # 若 var 为空会报错 ``` Bash 扩展特性 使用 \[\[ \]\](仅限 Bash)支持更复杂的逻辑和模式匹配: ```powershell if [[ "$str" == h* ]]; then # 匹配以 h 开头的字符串 echo "匹配成功" fi ``` 错误处理 添加 set -euo pipefail 在脚本开头可增强健壮性(遇到错误立即退出)。 ### 1.3 ☘️知识扩展 除了基本的使用方法,Shell 条件判断中有很多技巧和特殊用法,以下是一些常见的扩展点: **1)条件表达式:** -eq:等于 -ne:不等于 -gt:大于 -lt:小于 -ge:大于等于 -le:小于等于 **2)字符串判断:** \[ -z " s t r " \] :字符串长度为零 \[ − n " str" \]:字符串长度为零 \[ -n " str"\]:字符串长度为零\[−n"str" \]:字符串长度不为零 \[ " s t r 1 " = " str1" = " str1"="str2" \]:字符串相等 \[ " s t r 1 " ! = " str1" != " str1"!="str2" \]:字符串不等 **3)文件判断:** \[ -e 文件 \]:文件存在 \[ -r 文件 \]:文件存在且可读 \[ -w 文件 \]:文件存在且可写 \[ -x 文件 \]:文件存在且可执行 \[ -d 文件 \]:目录存在 \[ -f 文件 \]:文件存在且是普通文件 **4)逻辑运算:** \&\&:逻辑与 \|\|:逻辑或 !:逻辑非 例如,使用文件判断和逻辑运算: ```powershell #!/bin/bash if [ -e "somefile.txt" ]; then echo "文件存在" else echo "文件不存在" fi if [ -r "somefile.txt" ] && [ -w "somefile.txt" ]; then echo "文件可读且可写" fi ```