利用命令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}’