test测试功能
对于要测试系统上面某些文件或其相关属性时,可以使用test进行测试,test会根据相关功能返回True或False。
测试文件类型test -e filename
测试功能 | 意义 |
-e | 该文件是否存在 |
-f | 该文件名是否存在且为文件 |
-d | 该文件名是否存在且为目录 |
-b | 该文件名是否存在且为一个block device设备 |
-c | 该文件名是否存在且为一个character device设备 |
-S | 该文件名是否存在且为一个Socket文件 |
-p | 该文件是否存在且为一个FIFO(pipe)文件 |
-L | 该文件名是否存在且为一个链接文件 |
测试文件权限test -r filename
测试功能 | 意义 |
-r | 该文件是否存在且有可读权限 |
-w | 该文件是否存在且有可写权限 |
-x | 该文件是否存在且有可执行权限 |
-u | 该文件是否存在且具有SUID属性 |
-g | 该文件是否存在且具有SGID属性 |
-k | 该文件是否存在且具有Sticky bit属性 |
-s | 该文件是否存在且为非空白文件 |
两个文件之间比较test file1 -nt file2
测试功能 | 意义 |
-nt | (new than)判断file1是否比file2新 |
-ot | (old than)判断file1是否比file2旧 |
-ef | 判断file1与file2为同一个文件 |
两个整数之间判定test n1 -eq n2
测试功能 | 意义 |
-eq | 两个数值是否相等 |
-ne | 两个数值是否不等 |
-gt | n1是否大于n2 |
-lt | n1是否小于n2 |
-ge | n1是否大于等于n2 |
-le | n1是否小于等于n2 |
判断字符串数据test -z string
测试功能 | 意义 |
-z | 判断字符串是否为空,若是则返回true |
-n | 判断字符串是否为非空,若是则返回true |
test str1 == str2 | 判断两字符串是否相等 |
test str1 != str2 | 判断两字符串是否不等 |
多重判断test -r filename -a -x filename
测试功能 | 意义 |
-a | 是否同时成立,test -r file -a -x file,file同时具备r与x权限时,返回true |
-o | test -r file -o -x file是否有r或x权限,两个有一个成立,就返回true |
! | 非选项,test ! -x file,不具备x权限,返回true |
判断符号[ ]
除了上面使用到的test,我们也可以使用[ ]进行数据测试判断。使用[ ]是在里面的每一个元素必须要使用空格来分隔,变量必须要使用" “括起来,常量需要使用’ '或” "括起来。
例:
测试${MAIL}内容是否为空
[ -z "${MAIL}" ] && echo 'y' || echo 'n'
输入内容判断Yy or Nn
read -p "please input (y or n): " yn
[ "${yn}" == "Y" -o "${yn}" == "y" ] && echo "OK, you choice y" && exit 0
[ "${yn}" == "N" -o "${yn}" == "n" ] && echo "OK, you choice n" && exit 0
echo "We don't know what your choice is."