一、test 命令
1 判断文件和目录
$ touch a.txt
$ test -e a.txt;echo $?
0 # 测试成功,命令返回值为 0
$ test -e s.txt;echo $?
1 # 测试失败,命令返回值为 非 0
$ test -f a.txt;echo $?
0
$ test -d a.txt;echo $?
1
2 判断文件权限
3 两个文件新旧的判断
4 整数之间的判断
test用法
c语言风格
5 字符串的判断
注意
这里的 string 可以是实际的字符串,也可以是一个变量
这里说的字符串是否为 0 的意思是 字符串的长度是否为 0
示例
$ test -z ''; echo $? # 空字符串
0
$ test -z ' '; echo $? # 含有一个空格的字符串
1
$ test ! -z ' '; echo $? # 判断含有一个空格的字符串,其长度为非 0 的字符串, 空格也算是字符串。
0
$ test -z ${name}; echo $? # 变量未定义,shell 中认为其长度为 0
0
$ name=shark
$ test -z ${name}; echo $?
1
$ age='' # 定义变量,并且赋值为空字符串
$ test -z ${age}; echo $? # shell 中,被赋值为空字符串的变量长度也为 0
0
注意
再次强调一下, 在 shell 中,以下两种情况,变量的长度均视为 0
- 变量未定义
- 变量定义了,但赋值为空字符串,比如 a=’’ , b=""
[root@client ~]# name=shark
[root@client ~]# age=shark
[root@client ~]# test $name == $age ;echo $?
0
[root@client ~]# name=sharrk
[root@client ~]# test $name == $age ;echo $?
1
[root@client ~]# name=sharb
[root@client ~]# test $name == $age ;echo $?
1
[root@client ~]# test $name != $age ;echo $?
0
6 多个条件的判断
示例
二、判断符号中括号: []
[ -z "${HOME}" ] ; echo $?
必须要注意中括号的两端需要有空白字符来分隔喔! 假设我空白键使用“□”符号来表示,那么,在这些地方你都需要有空白键:
- 在中括号 [] 内的每个元素之间都需要用空格来分隔;
- 在中括号内的变量,最好都以双引号括号起来;