计算3-条件表达式和各种操作符
一、条件表达式
1.语法介绍
表达式 | 说明 |
---|---|
test 表达式 | test命令进行条件测试 |
[ 表达式 ] | 单中括号方式,功能同test命令,推荐 |
[[ 表达式 ]] | 双中括号,前两种的升级版 |
((表达式)) | 双小括号,一般用于if语句 |
双中括号可以使用通配符
&&、||、<、>等可以用于双中括号,不能用于单中括号
单中括号中用-a、-o、-gt、-lt代替
整数的关系运算也可以用双小括号
中括号里表达式前后都需要有空格
2.用法和小结
1) 普通用法
test -f /etc/passwd && echo 1 || echo 0
[ -f /etc/passwd ] && echo 1 || echo 0
[[ -f /etc/passwd ]] && echo 1 || echo 0
((3>2)) && echo 1 || echo 0
可以只写一半的条件语句,例如只写为真、为假时怎么操作
test -f /etc/passwd && echo 1
test -f /etc/passwd || echo 0
2) 扩展用法
如果需要执行的命令有多条,可以用下面的扩展语法
[ 条件1 ] &&{
命令1
命令2
命令3
}
二、文件测试操作符
1. 文件操作符介绍
操作符 | 操作符说明 |
---|---|
-d | 文件存在且为目录 |
-f | 文件存在且为普通文件 |
-e | 文件存在,不管是什么文件类型 |
-r | 文件存在且可读 |
-w | 文件存在且可写 |
-x | 文件存在且可执行 |
-s | 文件存在且大小不为0 |
-L | 文件存在且为链接文件 |
f1 -nt -f2 | 前面的文件比后面的文件新 |
f1 -ot -f2 | 前面的文件比后面的文件旧 |
以上文件操作符对[]、[[]]、test三者通用
读写执行权限并不全看文件属性,而是要结合实际用户,如root在没有读写权限时也能读写
2. 应用举例
[ -f /etc/passwd ] && echo 1||echo 0
[ -d /etc/passwd ] && echo 1||echo 0
[ -e /etc/passwd ] && echo 1||echo 0
[ -r /etc/passwd ] && echo 1||echo 0
[ -x /etc/passwd ] && echo 1||echo 0
[ -w /etc/passwd ] && echo 1||echo 0
[ -L /etc/passwd ] && echo 1||echo 0
三、字符串测试操作符
1. 操作符介绍
操作符 | 操作符说明 |
---|---|
-n "字符串" | 若字符串长度不为0则表达式成立 |
-z "字符串" | 若字符串长度为0则表达式成立 |
"串1" = "串2" | 若字符串1等于字符串2则表达式成立 |
"串1" != "串2" | 若字符串1不等于字符串2则表达式成立 |
对字符串的测试一定要将字符串加双引号后再比较
比较符号(如=和!=)两端一定要有空格
2. 简单案例演示
[ -n "" ] && echo 1 || echo 0
[ -z "" ] && echo 1 || echo 0
[ "abc" = "abc" ] && echo 1 || echo 0
[ "abc" != "abc" ] && echo 1 || echo 0
四、整数比较操作符和逻辑操作符
1. 操作符介绍
[]和test中 | (())和[[]]中 | 说明 |
---|---|---|
-eq | ==或= | 等于 (equal) |
-ne | != | 不等于 (not equal) |
-gt | > | 大于 (greater than) |
-ge | >= | 大于等于 (greater equal) |
-lt | < | 小于 (less than) |
-le | <= | 小于等于 (less equal) |
=和!=也可以在[]中做比较实用,但是需要转义
-gt和-lt也能在[[]]中使用,但不建议
比较符号两端也要有空格
2. 逻辑操作符介绍
[]和test中 | (())和[[]]中 | 说明 |
---|---|---|
-a | && | and,与 |
-o | || | or,或 |
! | ! | not,非 |
> 连接两个[]或[[]]的表达式可以用&&或|| |
-a和&&,需要两端为真才为真
-o和||,只需要任意一段为真就为真`
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· .NET Core 中如何实现缓存的预热?
· 三行代码完成国际化适配,妙~啊~
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?