test 命令可以用于判断文件类型以及值的比较,test 判断条件为真,返回 0;条件为假,返回 1。
目录
整数判断用到的运算符如下:
| 运算符 | 含义 |
| -eq | 等于(equal) |
| -gt | 大于(greater than) |
| -lt | 小于(less than) |
| -ge | 大于等于(greater equal) |
| -le | 小于等于(less equal) |
| -ne | 不等于(not equal) |
- # 如果一行有多个命令,命令行通过 ‘;’ 来判断一个命令是否结束
- # $? 表示上一条命令的执行结果命令行使用 ; 来分隔不同的命令
-
- # test 1 -eq 1 的执行结果为真,返回 0,因此 $? 拿到的值就是 0
- [gzx@VM-16-2-centos ~]$ test 1 -eq 1;echo $?
- 0
- [gzx@VM-16-2-centos ~]$ test 1 -eq -1;echo $?
- 1
- [gzx@VM-16-2-centos ~]$ test 1 -gt -1;echo $?
- 0
字符串判断用到的运算符如下:
| 运算符 | 含义 |
| == | 等于 |
| != | 不等于 |
| -n | 检查字符串长度是否大于0 |
| -z | 检查字符串长度是否等于0 |
- #注意:字符串和运算符之间必须要有空格隔开
- [gzx@VM-16-2-centos ~]$ test $USER == 'root';echo $?
- 0
- [gzx@VM-16-2-centos ~]$ test $USER == 'roat';echo $?
- 1
![]()
test命令除了可以做值的比较外,还可以检测文件类型
| 选项 | 含义 |
| -d name | 测试name 是否为一个目录 |
| -e name | 测试一个文件是否存在 |
| -f name | 测试name 是否为普通文件 |
| -L name | 测试name 是否为符号链接 |
| -r name | 测试name 文件是否存在且为可读 |
| -w name | 测试name 文件是否存在且为可写 |
| -x name | 测试name 文件是否存在且为可执行 |
| -s name | 测试name 文件是否存在且其长度不为0 |
| f1 -nt f2 | 测试文件f1 是否比文件f2 更新 |
| f1 -ot f2 | 测试文件f1 是否比文件f2 更旧 |
- [gzx@VM-16-2-centos ~]$ test -f file.txt;echo $?
- 0
- [gzx@VM-16-2-centos ~]$ test -d file.txt ;echo $?
- 1
- if 表达式1; then
- 执行语句1;
- 执行语句2;
- else
- 执行语句3
- fi
可以使用方括号代替 test 命令,但是首尾至少要有一个空格
- # 命令行输入
- [gzx@VM-16-2-centos ~]$ ./variable.sh file.txt
-
-
- ################# 写法一 #################
- # variable.sh
- if test -d $1;then
- echo "File $1 exists";
- else
- echo "File $1 not exists";
- fi
- ################# 写法二 #################
- if [ -d $1 ];then
- echo "File $1 exists";
- else
- echo "File $1 not exists";
- fi

- case 字符串变量 in
- 模式1)
- 执行语句1
- ;;
- 模式2)
- 执行语句2
- ;; #双分号结束(类似于C的break)
- *) # * 表示其他模式(类似于C的default)
- 执行语句3
- ;;
- esac