Shell—5.判断语句
条件判断
- -b 文件 文件是否存在 并且是否为块设备文件 是为真
- -c 文件 文件是否存在 并且是否为字符设备文件 是字符设备文件为真
- -d 文件 判断该文件是否存在 并且是否为目录文件
- -e 文件 判断文件是否存在
- -f 文件 判断该文件是否存在 并且是否为普通文件
- -L 文件 判断该文件是否存在 并且是否为符号连接文件
- -p 文件 判断该文件是否存在 并且是否为管道文件
- -s 文件 按断该文件是否存在 并且是否为空 空为真
- -S 文件 文件是否存在 并且是否为套接字文件
- -rxw 判断权限 当前用户
条件判断语法格式
- 格式1:test 条件表达式
- 格式2:[ 条件表达式 ]
- 格式3:[[ 条件表达式 ]] 支持正则
- test -e /root/install.log
- [ -e /root/install.log ]
- [[ 条件表达式 ]]
- 说明:后两种格式 括号里两边都必须有空格
- 更多判断 man test查看 很多的参数都用来进行条件判断
文件判断
判断文件类型
- -e 判断文件是否存在(任何类型文件)
- -f 判断文件是否存在并且是一个普通文件
- -d 判断文件是否存在并且是一个目录
- -L 判断文件是否存在并且是一个软链接
- -b 判断文件是否存在并且是一个块设备文件
- -S 判断文件是否存在并且是一个套接字文件
- -c 判断文件是否存在并且是一个字符设备文件
- -p 判断文件是否存在并且是一个命名管道文件
- -s 判断文件是否存在并且是一个非空文件(有内容)
判断文件权限
- -r 当前用户对其是否可读
- -w 当前用户对其是否可写
- -x 当前用户对其是否可执行
- -u 是否有suid 高级权限冒险位
- -g 是否sgid 高级权限强制位
- -k 是否有t位 高级权限粘滞位
判断文件新旧
- file1 -nt file2 比较file1是否比file2新
- file1 -ot file2 比较file1是否比file2旧
- file1 -ef file2 比较是否为同一个文件 或者用于判断硬链接 是否指向同一个i节点inode
数据判断
整数判断
- 整数1 -eq 整数2 是否相等
- -eq 相等
- -ne 不等
- -gt 大于
- -lt 小于
- -ge 大于等于
- -le 小于等于
--- 示例1 ---
ip=www.baidu.com
print -c1 $ip &>/dev/null
if [ $? -eq 0 ];then
echo "$ip is up"
else
echo "$ip is down"
fi
--- 示例2 ---
read -p "请输入要ping的IP地址:" ip
ping -c1 $ip &> /dev/null
if [ $? -eq 0 ];then
echo "$ip is OK!"
else
echo "$ip is error!"
fi
字符串判断
- 字串1 == 字串2
- 字串1 != 字串2
- -z 判断是否为空字符串 字符串长度为0则成立
- -n 判断是否为非空字符串 字符串长度不为0则成立
- string1 = string2 判断字符串是否相等
- string1 != string2 判断字符串是否不等
- 注意等号两侧有空格
- 字符串比较要使用双引号 [ "$username" = "root" ];echo $?
| 如果变量不存在会报语法错误
多重条件判断
- 判断1 -a 判断2 逻辑与 都成立为真
- 判断2 -o 判断2 逻辑或 一个成立为真
- !判断 逻辑非 使原始的判断取反
- shell中逻辑运算符没有优先级
- -a和&& 逻辑与 [ 1 -eq 1 -a 1 -ne 0 ] [ 1 -eq 1 ] && [ 1 -ne 0 ]
- -o和|| 逻辑或 [ 1 -eq 1 -o -ne 1 ]
- 特别说明:
| && 前面的表达式为真 才会执行后面的代码
| || 前面的表达式为假 才会执行后面的代码
| ; 只用于分割
类C风格的数值比较
- 注意: 在(())中, =表示赋值;==表示判断
字符串比较
- 注意:双引号引起来,看做一个整体;=和==在[ 字符串 ] 比较中都表示判断
- 注意:等号两侧有没有空格结果不一样 没空格结果是错的 不明白是什么意思
[]和[[]]区别
- 在判断字符串为空的时候,[[]]不加双引号,不会报错
- 用逻辑运算符连接两个表达式的时候,用一个括号可能会报错
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律