15 Dec 2014
常规用法,用在if语句中
if [空格$a空格-gt空格$b空格]
简洁用法
[[空格$a空格-gt空格$b空格]]
| 判断标识 | 含义 |
|---|---|
| 关于某个文件的类型判断 | |
| -e | 该文件是否存在 |
| -f | 该文件是否存在,并是普通文件 |
| -d | 该文件是否存在,并是目录文件 |
| -b | 该文件是否存在,并是块文件 |
| -c | 该文件是否存在,并是 character device |
| -S | 该文件是否存在,并是 Socket 文件 |
| -p | 该文件是否存在,并是 FIFO (pipe) 文件 |
| -L | 该文件是否存在,并是连接文件 |
| 检测文件权限,如 -r file 表示是否可读 但root常有例外 | |
| -r | 检查文件是否存在并具有读取权限 |
| -w | 检查文件是否存在并具有写入权限 |
| -x | 检查文件是否存在并具有执行权限 |
| -u | 检查文件是否存在并具有SUID的权限 |
| -g | 检查文件是否存在并具有SGID的权限 |
| -k | 检查文件是否存在并具有STID的权限 |
| -s | 检查文件是否存在并为非空文件 |
| 文件之间的比较,如:file1 -nt file2,file1是否比file2新 | |
| -nt | (newer than)判断 file1 是否比 file2 新 |
| -ot | (older than)判断 file1 是否比 file2 旧 |
| -ef | 判断是否为同一文件,可用在判断 hard link 的判定上。 主要意义在判定,兩個文件是否均指向同一個 inode ! |
| 关于两个整数之间的判断,例如 test n1 -eq n2 | |
| -eq | 两数值相等 (equal) |
| -ne | 两数值不等 (not equal) |
| -gt | n1 大于 n2 (greater than) |
| -lt | n1 小于 n2 (less than) |
| -ge | n1 大于等于 n2 (greater than or equal) |
| -le | n1 小于等于 n2 (less than or equal) |
| 判定字符串 | |
| -z string | 判定字串是否为 0 ?若 string 为空字串,则为true |
| -n string | 判定字串是否非 0 ?若 string 为空字串,则为 false。 |
| test str1 = str2 | 判定 str1 是否等于 str2 ,若相等,则为 true |
| test str1 != str2 | 判定 str1 是否不等于 str2 ,若相等,则为 false |
| 多重条件判定,例如: test -r filename -a -x filename | |
| -a | (and)两条件同时成立!例如 test -r file -a -x file,则file同時具有r与x权限时,才返回 true。 |
| -o | (or)两条件任何一个成立!例如 test -r file -o -x file,则file 具有 r 或 x权限时,就可返回 true。 |
| ! | 判断条件取反,如 test ! -x file ,当 file 不具有 x 时,返回 true |
# 检测文件权限时,如果执行命令的为root,常有不准确的情况 ll para.sh --wx------ 1 root root 377 May 7 20:46 para.sh [[ -r para.sh ]] && echo "done" done # para.sh无读权限,但由于root的超高权限,导致判断失误