test 命令可以用于判断文件类型以及值的比较,test 判断条件为真,返回 0;条件为假,返回 1。
目录
一、条件判断
(1) 整数判断
(2) 字符串判断
(3) 文件判断
二、if 语句
1、语法结构
2、实际运用
三、case语句
整数判断用到的运算符如下:
| 运算符 | 含义 |
| -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 表达式1then 执行语句1
else 执行语句2
fi
可以使用方括号代替 test 命令,但是首尾至少要有一个空格
# 命令行输入
[gzx@VM-16-2-centos ~]$ ./variable.sh file.txt################# 写法一 #################
# variable.sh
if test -d $1then echo "File $1 exists"
elseecho "File $1 not exists"
fi
################# 写法二 #################
if [ -d $1 ] then echo "File $1 exists"
elseecho "File $1 not exists"
fi

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