shell条件测试表达式
Write by lyc at 2018-10-18
Update by lyc at 2021-3-17:整理自己早期的word版本到markdown
一、条件测试表达式语法
1.条件测试表达式
| 序号 |
条件测试语法 |
说明 |
|---|---|---|
| 1 | test <测试表达式> |
这是利用 test 命令进行条件测试表达式的方法。test 命令和 <测试表达式> 之间至少有一个空格。 |
| 2 | [ <测试表达式> ] |
这是通过 [] 单中括号进行条件测试表达式的方法,和 test 命令的用法相同。[] 的边界和内容之间至少有一个空格。 |
| 3 | [[ <测试表达式> ]] |
这是通过 [[]] 双中括号进行条件测试表达式的方法,是比 test 和 [] 更新的语法格式。[[]] 的边界的内容之间至少与一个空格。 |
| 4 | ((<测试表达式>)) |
这是通过 (()) 双小括号进行条件测试表达式的方法,一般用于 if 语句里。(()) 双小括号两端不需要空格。 |
- 语法1和语法2等价,语法3是扩展的
test命令,语法4常用于计算。 - 在语法3
[[]]双中括号中可以使用通配符等进行模式匹配。 &&、||、>、<等操作符可以应用于[[]]中,但不能应用于[]中,在[]中一般用-a,-o,-gt(用于整数),-lt(用于整数)代替上述操作符。- 对于整数的关系运算,也可以使用shell算术运算符。
2.文件测试表达式操作符
| 常用文件测试操作符 | 说明 |
|---|---|
-d |
存在且为目录则为真,即表达式成立 |
-f |
文件存在且为普通文件则为真,即表达式成立 |
-e |
文件存在即为真,即表达式成立。-e只要文件存在即可,不会辨别是否是目录或普通文件。 |
-r |
文件存在且可读则为真,即表达式成立 |
-s |
文件存在且文件大写不为0则为真,即表达式成立 |
-w |
文件存在且可写则为真,即表达式成立 |
-x |
文件存在且可执行则为真,即表达式成立 |
-L |
文件存在且为链接文件则为真,即表达式成立 |
f1 -nt f2 |
文件fi比f2新则为真,即表达式成立。根据文件的修改时间来计算 |
f1 -ot f2 |
文件fi比f2旧则为真,即表达式成立。根据文件的修改时间来计算 |
3.字符串测试表达式
一定要将字符串加上双引号之后再进行比较
比较符号两端一定要有空格
条件测试语法|说明
—|—-z "string"|字符串 "string" 长度为0则为真,即表达式成立-n "string"|字符串 "string" 长度不为0则为真,即表达式成立"string1" = "string2""string1" == "string2"|若字符串 "string1" 等于字符串 "string2" ,则为真,即表达式成立"string1" != "string2"|若字符串 "string1" 不等于 字符串"string2",则为真,即表达式成立
4.整数比较表达式
在[]和test中的语法 |
在[[]]和(())中的语法 |
说明 |
|---|---|---|
-eq |
==或= |
等于 |
-ne |
!= |
不等于 |
-gt |
> |
大于 |
-ge |
>= |
大于等于 |
-lt |
< |
小于 |
-le |
<= |
小于等于 |
1 | # 语法: |
5.逻辑操作表达式
在[]和test中的语法 |
在[[]]和(())中的语法 |
说明 |
|---|---|---|
-a |
&& |
and,与,两端都为真,则结果为真 |
-o |
|| |
or,或,两端有一个为真,则结果为真 |
! |
! |
not,非,两端相反,结果为真 |
-a和-o逻辑操作符号需要用于[]中&&和||逻辑操作符可用于[[]]中或 (())中,也可以在外部连接多个[]``- 在
[]和[[]]的两端及比较符号的两端,必须要有空格,但是对于(())不需要空格
二、条件测试表达式用法
1.test [-option] <测试表达式>
test -f FILE判断目标文件是否为普通文件,$?返回值0-是普通文件,1-不是普通文件test -z "string"判断字符串长度是否为0,$?返回值0-字符串长度是0,1-字符串长度不是0
2.[ <测试表达式> ] 单括号
[ <测试表达式> ] 语法与 test 等价,即 test 的所有判断选项都可以使用。
在 [] 中一般用 -a, -o, -gt(用于整数)、-lt(用于整数)代替 &&, ||, >, < 等操作符。
1 | # 测试判断/tmp/1.txt是否存在 |
3.[[ <测试表达式> ]] 双括号
[[]]双中括号中可以使用通配符等进行模式匹配,&&、||、>、<等操作符可以应用于[[]]中。
1 | # 测试判断/tmp/1.txt是否存在 |
