按照文件类型判断
测试文件 | 作用 |
-b 文件 | 判断该文件是否存在,并且是否为块设备文件 |
-c 文件 | 判断该文件是否存在,并且是否为字符设备文件 |
-d 文件 | 判断该文件是否存在,并且是否为目录文件 |
-e 文件 | 判断该文件是否存在 |
-f 文件 | 判断该文件是否存在,并且是否为普通文件 |
-L 文件 | 判断该文件是否存在,并且是否为符号链接文件 |
-p 文件 | 判断该文件是否存在,并且是否为管道文件 |
-s 文件 | 判断该文件是否存在,并且是否为非空 |
-S 文件 | 判断该文件是否存在,并且是否为套接字文件 |
判断格式
test -e /tmp/install.log #判断文件是否存在
echo $? #查询上一条命令是否执行正确
[ -e /tmp/install.log ] && echo "yes" || echo "no"
或者:
[ -e /tmp/install.log ]
按照文件权限判断
测试选项 | 作用 |
-r 文件 | 判断该文件是否存在,并且是否该文件拥有读权限 |
-w文件 | 判断该文件是否存在,并且是否该文件拥有写权限 |
-x 文件 | 判断该文件是否存在,并且是否该文件拥有执行权限 |
-u 文件 | 判断该文件是否存在,并且是否该文件拥有SUID权限 |
-g 文件 | 判断该文件是否存在,并且是否该文件拥有SGID权限 |
-k 文件 | 判断该文件是否存在,并且是否该文件拥有SBit权限 |
判断格式
[ -w student.txt ] && echo "yes" || echo "no"
两个文件之间的比较
测试选项 | 作用 |
文件1 -nt 文件2 | 判断文件1的修改时间是否比文件2新 (如果新则为真) |
文件1 -ot 文件2 | 判断文件1的修改时间是否比文件2的旧 (如果旧则为真) |
文件1 -ef 文件2 | 判断文件1是否和文件2的Inode号一致, 可以理解为两个 文件是否为同一个文件。 这个判断用于判断硬链接是很 好的方法 |
ln /root/student.txt /tmp/stu.txt #创建硬连接
[ /root/student.txt -ef /tmp/stu.txt ] && echo "yes" || echo "no" yes
两个整数之间的比较
测试选项 | 作用 |
整数1 -eq 整数2 equal | 判断整数1是否和整数2相等(相等为真) |
整数1 -ne 整数 2 not equal | 判断整数1是否和整数2不相等(不相等为真) |
整数1 -gt 整数2 great than | 判断整数1是否大于整数2(大于为真) |
整数1 -lt 整数2 less than | 判断整数1是否小于整数2(小于为真) |
整数1 -ge 整数2 great equal | 判断整数1是否大于等于整数2 (大于等于为真) |
整数1 -le 整数 | 判断整数1是否小于等于整数2 (小于等于为真) |
[ 23 -gt 22 ] && echo 'yes' || echo 'no'
字符串判断
测试选项 | 作用 |
-z 字符串 | 判断字符串是否为空(为空返回真) |
-n 字符串 | 判断字符串是否为非空(非空返回真) |
字串1 ==字串2 | 判断字符串1是否和字符串2相等(相等返回真) |
字串1 != 字串2 | 判断字符串1是否和字符串2不相等(不相等返回真) |
name=daniel #给name变量赋值
[ -z "$name" ] && echo '为空' || echo "不为空" #判断name变量是否为空
[ -n "$name" ] && echo '非空' || echo "为空" #判断是否非空
多重条件判断
测试选项 | 作用 |
判断1 -a 判断2 and | 逻辑与,判断1和判断2都成立,最终的结果才为真 |
判断1 -o 判断2 or | 逻辑或,判断1和判断2有一个成立,最终的结果就为真 |
!判断 | 逻辑非,使原始的判断式取反 |
aa=11
[ -n "$aa" -a "$aa" -gt 23 ] && echo "yes" || echo "no"
##判断变量aa是否有值,同时判断变量aa的是否大于23