test 测试命令
介绍
在 Shell 中的 test 测试命令,用于测试某种条件或者某集中条件是否真实存在。
该命令在 Shell 中流程控制部分的判断语句和循环语句中条件测试的工具。test 命令经常用于对判断语句进行测试,用于检查某个条件是否成立,它可以进行数值、字符和文件三个方面的测试。
1 2 3
| 判断语句是编程语言里面的基本组成部分:if...else
循环语句也就是 for 和 while,在Shell中还有一个循环语句:until
|
使用方式
Shell 中 test 命令的用法有两种:
方式一:
expression 为表达式,当 test 判断 expression 成立时,返回状态为 0,否则为非 0 值。
方式二:
expression 为表达式,test 命令可以简写为 [ ]
。
1 2 3 4 5
| 注意,`[]` 和 expression 之间是有空格的,这两个空格是必须的,否则会报语法错误。
正确写法:[ expression ]
错误写法:[expression]
|
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
|
[root@cjh tmp]
[root@cjh tmp] 0
[root@lcjh tmp]
[root@cjh tmp] 1
[root@cjh tmp] no [root@cjh tmp] yes
|
命令参数选项
test 命令提供了一系列选项,便于对书写判断表达式,针对对不同的对象类型也提供不同选项,支持的对象类型有文件和普通对象。
普通对象包括字符串、整数等。
判断对象为文件
按照文件类型进行判断
测试选项 |
作用 |
-b 文件 |
判断该文件是否存在,并且是否为块设备文件(是块设备文件为真) |
-c 文件 |
判断该文件是否存在,并且是否为字符设备文件(是字符设备文件则为真) |
-d 文件 |
判断该文件是否存在,并且是否为目录文件(是目录文件则为真) |
-e 文件 |
判断该文件是否存在(存在则为真) |
-f 文件 |
判断该文件是否存在,并且是否为普通文件(是普通文件则为真) |
-L 文件 |
判断该文件是否存在,并且是否为符号链接文件(是符号链接文件则为真) |
-p 文件 |
判断该文件是否存在,并且是否为管道文件(是管道文件则为真) |
-s 文件 |
判断该文件是否存在,并且是否为非空(是非空则为真) |
-S 文件 |
判断该文件是否存在,并且是否为套接字文件(是套接字文件则为真) |
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| [root@cjh tmp] 总用量 12 -rw-r--r--. 1 root root 371 10月 16 13:28 student.txt -rw-r--r--. 1 root root 318 10月 14 18:03 test2.txt -rw-r--r--. 1 root root 69 10月 16 17:39 test.txt
[root@cjh tmp] no
[root@cjh tmp] yes
[root@cjh tmp] yes
[root@cjh tmp] [root@cjh tmp] no
|
按照文件权限进行判断
测试选项 |
作用 |
-r 文件 |
判断该文件是否存在,并且是香该文件拥有读权限(有读权限为真) |
-w 文件 |
判断该文件是否存在,并且是否该文件拥有写权限(有写权限为真) |
-x 文件 |
判断该文件是否存在,并且是否该文件拥有执行权限(有执行权限为真) |
-u 文件 |
判断该文件是否存在,并且是否该文件拥有 SUID 权限(有 SUID 权限为真) |
-g 文件 |
判断该文件是否存在,并且是否该文件拥有 SGID 权限(有 SGID 权限为真) |
-k 文件 |
判断该文件是否存在,并且是否该文件拥有 SBit 权限(有 SBit 权限为真) |
示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38
| [root@cjh tmp] 总用量 12 -rw-r--r--. 1 root root 371 10月 16 13:28 student.txt -rw-r--r--. 1 root root 318 10月 14 18:03 test2.txt -rw-r--r--. 1 root root 69 10月 16 17:39 test.txt
[root@cjh tmp] yes
[root@cjh tmp] no
[root@cjh tmp]
[root@cjh tmp] -rwSr--r--. 1 root root 371 10月 16 13:28 student.txt
[root@cjh tmp] yes
[root@cjh tmp] [root@cjh tmp] -rw-r--r--. 1 root root 371 10月 16 13:28 student.txt
|
两个文件之间进行比较
测试选项 |
作用 |
文件 1 -nt 文件 2 |
判断文件 1 的修改时间是否比文件 2 的新(如果新则为真)。 |
文件 1 -ot 文件 2 |
判断文件 1 的修改时间是否比文件 2 的旧(如果旧则为真)。 |
文件 1 -ef 文件 2 |
判断文件 1 是否和文件 2 的 10d 号一致,可以理解为两个文件是否为同一个文件。这个用于判断硬链接是很好的方法 |
示例:
1 2 3 4 5 6 7
|
[root@cjh tmp]
[root@cjh tmp] yes
|
判断对象为普通对象(字符串、整数….)
整数
测试选项 |
作用 |
整数 1 -eq 整数 2 |
判断整数 1 是否和整数 2 相等(相等为真) |
整数 1 -ne 整数 2 |
判断整数 1 是否和整数 2 不相等(不相等为真) |
整数 1 -gt 整数 2 |
判断整数 1 是否大于整数 2(大于为真) |
整数 1 -lt 整数 2 |
判断整数 1 是否小于整数 2(小于为真) |
整数 1 -ge 整数 2 |
判断整数 1 是否大于等于整数 2(大于等于为真) |
整数 1 -le 整数 2 |
判断整数 1 是否小于等于整数 2(小于等于为真) |
示例:
1 2 3 4 5 6 7 8 9 10 11
| [root@cjh tmp] no
[root@cjh tmp] yes
[root@cjh tmp] yes
|
字符串
测试选项 |
作用 |
-z 字符串 |
判断字符串是否为空(为空返回真) |
-n 字符串 |
判断字符串是否为非空(非空返回真) |
字符串 1 == 字符串 2 |
判断字符串 1 是否和字符串 2 相等(相等返回真) |
字符串 1 != 字符串 2 |
判断字符串 1 是否和字符串 2 不相等(不相等返回真) |
示例:
1 2 3 4 5 6 7 8
| [root@cjh tmp] yes
[root@cjh tmp]
[root@cjh tmp] no
|
示例 2:
1 2 3 4 5 6 7 8 9 10
| [root@cjh tmp] [root@cjh tmp]
[root@cjh tmp] no
[root@cjh tmp] yes
|
1
| 提示:Shell中用==双等号来比对两个字符串是否相等(内容相同)。使用-eq来比对两个整数是否相等。
|
多重条件判断
多重条件判断就是,可以同时判断多个条件,前边的条件都可以。
测试选项 |
作用 |
判断 1 -a 判断 2 |
逻辑与,判断 1 和判断 2 都成立时,最终的结果才为真 |
判断 1 -o 判断 2 |
逻辑或,判断 1 和判断 2 有一个成立,最终的结果才为真 |
!判断 |
逻辑非,使原始的判断表达式结果取反 |
示例 1:
1 2 3 4 5 6 7 8 9 10 11
| [root@cjh tmp]
[root@cjh tmp] no
[root@cjh tmp] [root@cjh tmp] yes
|
示例 2:
1 2 3 4 5 6 7 8 9 10 11 12 13
|
[root@cjh tmp] [root@cjh tmp] no
[root@cjh tmp] yes
|