当要检测系统上的某些文件或者相关属性时,利用test这个命令来工作:
测试的标志 | 代表意义 |
-e | 该文件名是否存在 |
-f | 该文件名是否存在且为文件 |
-d | 该文件名是否存在且为目录 |
-b | 该文件名是否存在且为一个block device设备 |
-c | 该文件名是否存在且为一个character device设备 |
-S | 该文件名是否存在且为一个Socket文件 |
-p | 该文件名是否存在且为一个FIFO文件 |
-L | 该文件名是否存在且为一个连接文件 |
关于文件的权限检测 | |
-r | 检测该文件名是否存在且具有“可读”权限 |
-w | 检测该文件名是否存在且具有“可写”权限 |
-x | 检测该文件名是否存在且具有“可执行”权限 |
-u | 检测该文件名是否具有“SUID”的属性 |
-g | 检测该文件名是否存在且具有“SGID”的属性 |
-k | 检测该文件名是否存在且具有“Sticky bit”的属性 |
-s | 检测该文件名是否存在且为“非空白文件” |
两个文件之间的比较,如:test file1 –nt file2 | |
-nt | 判断file1是否比file2新 |
-ot | 判断file1是否比file2旧 |
-ef | 判断file1与file2是否为同一文件,可用在判断hard link的判定上。主要意义在于判断两个文件是否均指向同一个iNode |
关于两个整数之间的判定,如:test n1 –eq n2 | |
-eq | 两数值相等 |
-ne | 两数值不相等 |
-gt | n1大于n2 |
-lt | n1小于n2 |
-ge | n1大于等于n2 |
-le | n1小于等于n2 |
判定字符串的数据 | |
test –z string | 判定字符串是否为0,若string为空字符串,则true |
test –n string | 判定字符串是否非为0,若string为空字符串,则为false,注:-n也可以省略 |
test str1=str2 | 判定str1是否等于str2,若相等,则会回传true |
test str1 != str2 | 判定str1是否不等于str2,若相等,则回传false |
多重条件判定,例如:test –r filename –a –x filename | |
-a | 两个条件同时成立!,例如test –r file –a –x,则file同时具有r与x权限时,才回传true |
-o | 任何一个条件成立,例如,test –r file –o –x file,则file具有r或x权限时,就可回传true |
! | 反向状态,如,test ! –x file,当file不具有x时,回传true |
~# vim sh05.sh
#!/bin/bash
#Program
# User input a filename, program will check the flowing;
# 1)exist? 2) file/directory? 3) file permissions
#History
#2015/2/3 tian First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
echo -e "Please input a filename I will check the filename's type and\
permission.\n "
read -p "Please input a filename: " filename
test -z $filename && echo "You Must input a filename." && exit 0
test ! -e $filename && echo "The filename '$filename' Do Not exist" && exit 0
test -f $filename && filetype="regular file"
test -d $filename && filetype="directory"
test -r $filename && perm="readable"
test -w $filename && perm="$perm writeable"
test -x $filename && perm="$perm excutable"
echo "The filename: $filename is a $filetype"
echo "And the permissions are : $perm"
~# source sh05.sh
Please input a filename I will check the filename's type andpermission.
Please input a filename: tianfile
The filename: tianfile is a regular file
And the permissions are : readable writeable