6.4 Bash条件表达式
条件表达式用在 [[ 复合命令、test以及 [ 内建命令中。
表达式可以是一元或二元的。一元表达式一般用于检测文件的状态。也有一些字符串操作和数字比较操作的一元表达式。如果 file 参数是 /dev/fd/N 的形式,则检查文件描述符 N 。如果 file 参数是 /dev/stdin, /dev/stdout, 或 /dev/stderr 中的一个,则检查文件描述符0,1,2。
当使用 ‘[[’时, ‘<’ 和 ‘>’使用当前的locale按字典序文本排序。test命令使用ASCII顺序。
除非另有说明,对文件的操作是跟踪符号链接,对链接的目标操作,而不是链接本身。
-a file
如果文件file存在则真。
-b file
如果文件file存在,并且是块文件,则真。
-c file
如果文件file存在,并且是字符文件,则真。
-d file
如果文件file存在,并且是目录,则真。
-e file
如果文件file存在则真。
-f file
如果文件file存在,并且是普通文件,则真。
-g file
如果文件file存在,并且它的组ID设置位被设置了,则真。
-h file
如果文件file存在,并且是符号链接,则真。
-k file
如果文件file存在,并且它的黏着位被设置了,则真。
-p file
如果文件file存在,并且是命名管道(FIFO),则真。
-r file
如果文件file存在,并且可读,则真。
-s file
如果文件file存在,并且大小大于0,则真。
-t fd
如果文件描述符fd是打开的,并且指向终端,则真。
-u file
如果文件file存在,并且它的用户ID设置位被设置了,则真。
-w file
如果文件file存在,并且可写,则真。
-x file
如果文件file存在,并且可执行,则真。
-G file
如果文件file存在,并且属于有效组ID,则真。
-L file
如果文件file存在,并且是符号链接,则真。
-N file
如果文件file存在,并且上次读取后被修改过,则真。
-O file
如果文件file存在,并且属于有效用户ID,则真。
-S file
如果文件file存在,并且是套接字,则真。
file1 -ef file
如果文件file1 和file2 指向相同的设备和inode号码,则真。
file1 -nt file2
如果文件file1 比file2 新(根据修改日期),或者file1存在,而file2不存在,则真。
file1 -ot file2
如果文件file1 bifile2 旧,或者file2存在,而file1不存在,则真。
-o optname
如果shell选项 optname 启用,则真。选项应该属于内建命令set的-o选项中的选项。(见 set内建命令)
-v varname
如果shell变量varname被设置了。(被赋值了)
-z string
如果字符串string的长度为0,则真。
-n string
string
如果字符串string的长度非0,则真。
string1 == string2
string1 = string2
如果字符串相等,则真。‘=’ 的形式必须用在POSIX模式下的test命令中。
string1 != string2
如果字符串不相等,则真。
string1 < string2
如果字符串string1在字典排序中在string2之前,则真。
string1 > string2
如果字符串string1在字典排序中在string2之后,则真。
arg1 OP arg2
OP是 ‘-eq’, ‘-ne’, ‘-lt’, ‘-le’, ‘-gt’, 或者 ‘-ge’ 之一。对应的,如果arg1 等于,不等于,小于,小于等于,大于,大于等于arg2,则这些二元算式返回真。arg1和arg2是正整数或者负整数。