shell脚本条件测试与比较
2024-09-06 19:36:15
1、条件测试常用语法
test 测试表达式 | 利用test命令进行条件测试表达式,test命令与测试表达式之间至少有一个空格 |
[ 测试表达式 ] | 通过[ ]中括号进行条件测试表达式,[]中括号边界与测试表达式之间至少有一个空格 |
[[ 测试表达式 ]] | 通过[[ ]]双中括号进行条件测试表达式,[[ ]]双中括号与测试表达式之间至少有一个空格 |
((测试表达式)) | 通过(( ))双小括号进行条件测试表达式,( ))双小括号两端不需要空格,常用于整数对比 |
说明:
- 双中括号[[ ]]中可以使用通配符进行匹配,这是其区别于其它几种语法的地方
- &&,||,<,>等操作符可用于双中括号[[ ]]中,但不能应用于[ ]中,在[ ]中一般用-a,-o,-lt,-gt来代替
举例:
test -f /tmp/test.txt && echo || echo
[ -f /tmp/test.txt ] && echo || echo
[[ -f /tmp/test.txt ]] && echo || echo
((>)) && echo || echo 0
2、测试表达式用法
2.1、文件测试表达式
-d 文件 | 文件存在且为目录则为真 |
-f 文件 | 文件存在且为普通文件则为真 |
-e 文件 | 文件存在则为真,不辩别是目录还是文件 |
-s 文件 | 文件存在且文件大小不为0则为真 |
-r 文件 | 文件存在且可读则为真,与执行脚本的用户权限也有关 |
-w 文件 | 文件存在且可写则为真,与执行脚本的用户权限也有关 |
-x 文件 | 文件存在且可执行则为真,与执行脚本的用户权限也有关 |
-L 文件 | 文件存在且为链接文件则为真 |
f1 -nt f2 | 文件f1比文件f2新则为真,根据文件的修改时间计算 |
f1 -ot f2 | 文件f1比文件f2旧则为真,根据文件的修改时间计算 |
2.2、字符串测试表达式
-n "字符串" | 若字符串的长度不为0(非空),则为真 |
-z "字符串" | 若字符串的长度为0,则为真 |
"串1" = "串2" | 若字符串1等于字符串2则为真,可用"=="代替"=" |
"串1" != "串2" | 若字符串1不等于字符串2则为真,可用"!=="代替"!=" |
注意:
- 对于字符串的比较,一定要将字符串加比引号后再比较。如[ -n "$string" ]
- =与!=可用于判断两个字符串是否相同
2.3、整数操作符
在[]和test中使用 | 在[[ ]]和(( ))中使用 | 说明 |
-eq | ==或= | 等于,全拼为equal |
-nq | != | 不等于,全拼为not equal |
-gt | > | 大于,全拼为greater than |
-ge | >= | 大于等于,全拼为greater equal |
-lt | < | 小于,全拼为less than |
-le | <= | 小于等于,全拼为less equal |
2.4、逻辑操作符
在[]和test中使用 | 在[[ ]]和(( ))中使用 | 说明 |
-a | && | and,与,两端都为真,则结果为真 |
-o | || | or,或,两端有一个为真,则结果为真 |
! | ! | not,非,两端相反,则结果为真 |
2.5、测试表达式的区别总结
测试表达式符号 | test | [ ] | [[ ]] | (( )) |
边界是否需要空格 | 需要 | 需要 | 需要 | 不需要 |
逻辑操作符 | !、-a、 -o | !、-a、 -o | !、&&、|| | !、&&、|| |
整数比较操作符 | -eq、-ne、-lt、-gt、-ge、-le | -eq、-ne、-lt、-gt、-ge、-le |
-eq、-ne、-lt、-gt、-ge、-le或 =、!=、<、>、>=、<= |
=、!=、<、>、>=、<= |
字符串比较操作符 | =、==、!= | =、==、!= | =、==、!= | =、==、!= |
是否支持通配符 | 不支持 | 不支持 | 支持 | 不支持 |
最新文章
- Log4j的ConversionPattern参数的格式含义
- java单例类/
- 什么是Ajax
- HDU 4463 Outlets (最小生成树)
- 安卓 canvas
- pixi.js
- mysql生成百万级数量测试数据
- Linux系统下常用的快捷键
- 学JAVA第十三天,方法、方法重载及构造函数
- Callable,Future和FutureTask详解
- Runtime常用的几个场景
- ElasticSearch是如何实现分布式的?
- JSP基础知识➣Cookie和Session(五)
- Nessus中文报告自动化脚本
- Python2.7-array
- BZOJ 百题纪念!
- LaTeX:Question &; Answer
- Google C++ Coding Style 学习笔记
- hello word!------为什么开通博客以及自我介绍
- 迅搜sdk试用