利用命令test以及判断符号可以检测很多文件,设备,以及判定
(可以搭配的判断式:$? , && , ||)
用法一 #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用于两个文件之间的比较:
test file1 -nt file2 #判断file1是否比file2要新
test file1 -ot file2 #判断file1是否比file2要旧
test file1 -ef file2 #判断file1是否与file2是同一个文件,例如硬链接文件关于两个整数之间的判定
test n1 参数 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
test str1==str2 #判定str1是否等于str2,若等于,则返回true
test str1!=str2 #判定str1是否不等于str2,若等于,则返回false
多重条件判定
例如:test -r filename -a -x filename #是否filename同时具有rx权限,具有则返回true。参数 -a为and的意思
参数 -o则为or的意思,而参数 !表示反向判定。
示例:让对象输入文件名,判定文件是否存在,不存在给一个信息,存在就判定是否是文件或者目录,返回一个信息,并判定文件的权限
#! /bash/bin
echo -e “please input a filename ,i will check the filename’s type and permission”
read -p “input a filename:” filename
test -z ${filename} && exit 0
test ! -e ${filename} && print ‘not exit’ && exit 0
test -f ${filename} && print ‘that is a file’ || print ‘that is a directory’
test -r ${filename} && perm=readable
test -w KaTeX parse error: Expected 'EOF', got '&' at position 12: {filename} &̲& perm='{perm} writable’
test -x KaTeX parse error: Expected 'EOF', got '&' at position 13: {filename} &̲& perm='{perm} executable’
print ‘you permission is $ {perm}’