出处:《跟老男孩学Linux:Shell编程实战》
目录
不同符号测试表达式[ ]、[[ ]]、(( ))、test的区别
帮助命令
man test
文件测试表达式
常用的文件测试操作符
常用的文件测试操作符 | 说明 |
---|---|
-d 文件,d的全拼为directory | 文件存在且为目录则为真 |
-f 文件,f的全拼为file | 文件存在且为普通文件则为真 |
-e 文件,e的全拼为exist | 文件存在则为真 |
-r 文件,r的全拼为read | 文件存在且可读则为真 |
-s 文件,s的全拼为size | 文件存在且文件大小不为0则为真 |
-S 文件,S的全拼为socket | 文件存在且为套接字则为真 |
-w 文件,w的全拼为write | 文件存在且可写则为真 |
-x 文件,x的全拼为executable | 文件存在且可执行则为真 |
-L 文件,L的全拼为link | 文件存在且为链接文件则为真 |
f1 -nt f2,nt的全拼为newer than | 文件f1比文件f2新则为真。根据文件的修改时间来计算 |
f1 -ot f2,ot的全拼为older than | 文件f1比文件f2旧则为真。根据文件的修改时间来计算 |
字符串测试操作符
字符串测试操作符 | 说明 |
---|---|
-n "字符串" | 若字符串长度不为0,则为真 |
-z "字符串" | 若字符串长度为0,则为真 |
"串1" = "串2" | 若字符串1等于字符串2,则为真。可使用 == 代替 = |
"串1" != "串2" | 若字符串1不等于字符串2,则为真。可使用 !== 代替 != |
- 对于字符串的测试,一定要将字符串加双引号之后再进行比较。如[ -n "$myvar" ],特别是使用[]的场景。
- 比较符号(例如 = 和 != )的两端一定要有空格。
- "!="和"="可用于比较两个字符串是否相同
整数二元比较操作符
在[ ]以及test中使用的比较符 | 在(( ))和[[ ]]中使用的比较符 | 说明 |
---|---|---|
-eq | == 或 = | 相等,全拼为equal |
-ne | != | 不等,全拼为not equal |
-gt | > | 大于,全拼为greater than |
-ge | >= | 大于等于,全拼为greater equal |
-lt | < | 小于,全拼为less than |
-le | <= | 小于等于,全拼为less equal |
- “=”和“!=”也可在[]中做比较使用,但在[]中使用包含“>”和“<”的符号时,需要用反斜线转义,有时不转义虽然语法不会报错,但是结果可能会不对。
- 也可以在[[]]中使用包含“-gt”和“-lt”的符号,但是不建议这样使用。
- 比较符号连段也要有空格。
逻辑操作符
在[ ] 和test中使用的操作符 | 在(( ))和[[ ]]中使用的操作符 | 说明 |
---|---|---|
-a | && | and,与 |
-o | || | or,或 |
! | ! | not,非 |
- 逻辑操作符前后的表达式是否成立,一般用真假来表示。
- “!”的中文意思是反,即与一个逻辑值相反的逻辑值。
- -a的中文意思是“与”,前后两个逻辑值都为“真”,综合返回值才为“真”,反之为“假”。
- -o的中文意思是“或”,前后连个逻辑值只要有一个为“真”,返回值就为“真”。
- 连接两含[ ]、test或[[ ]]的表达式可用 && 或 ||
不同符号测试表达式[ ]、[[ ]]、(( ))、test的区别
测试表达式符号 | [ ] | test | [[ ]] | (( )) |
---|---|---|---|---|
边界是否需要空格 | 需要 | 需要 | 需要 | 不需要 有空格不报错 |
逻辑操作符 | -a、-o、! | -a、-o、! | &&、||、! | &&、||、! |
整数比较操作符 | -eq、-gt、-ge、-lt、-le | -eq、-gt、-ge、-lt、-le | -eq、-gt、-ge、-lt、-le 或 =、>、>=、<、<= | =、>、>=、<、<= |
字符串比较操作符 | =、==、!= | =、==、!= | =、==、!= | =、==、!= |
是否支持通配符匹配 | 支持 |
- 出处:《跟老男孩学Linux:Shell编程实战》