6.4 Bash的条件表达式
条件表达式被[[
复合命令(见5.2 条件性结构)以及test
和[
内置命令(见4.1 Bourne Shell内置程序)使用。 test
和[
命令根据参数的数量决定其行为;关于任何其他命令的具体操作,请参见这些命令的描述。
表达式可以是一元的或二元的,并由以下主语组成。一元表达式通常被用来检查文件的状态。 还有字符串运算符和数字比较运算符。当在表达式中使用时,Bash 会专门处理几个文件名。如果Bash运行的操作系统提供了这些特殊的文件,Bash就会使用它们;否则它就会用这种行为在内部模拟它们:如果其中一个主语的file参数的形式是/dev/fd/N,那么就会检查文件描述符N。如果对其中一个主要参数的file参数是/dev/stdin、/dev/stdout、或/dev/stderr中的一个,则分别检查文件描述符0、1或2。
当与[[
一起使用时,‘<’和‘>’操作符使用当前语言环境按字典顺序排序。 test
命令使用ASCII排序。
除非另有说明,否则对文件进行操作的主程序遵循符号链接,并对链接的目标而不是链接本身进行操作。
-a file
如果file存在,则为 "真"。
-b file
如果file存在,并且是一个块特殊文件,则为真。
-c file
如果file存在并且是一个特殊字符的文件,则为 "真"。
-d file
如果file存在并且是一个目录,则为 "真"。
-e file
如果file存在,则为 "真"。
-f file
如果file存在,并且是一个普通的文件,则为真。
-g file
如果file存在并且它的set-group-id位被设置,则为真。
-h file
如果file存在并且是一个符号链接,则为 "真"。
-k file
如果file存在,并且其"sticky"位被设置,则为真。
-p file
如果file存在并且是一个命名的管道(FIFO),则为 "真"。
-r file
如果file存在并且可读,则为 "真"。
-s file
如果file存在,并且大小大于0,则为真。
-t fd
如果文件描述符fd是开放的,并且是指一个终端,则为真。
-u file
如果file存在,并且其set-user-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 file2
如果file1和file2指的是相同的设备和inode号,则为真。
file1 -nt file2
如果file1比file2新(根据修改日期),或者如果file1存在而file2不存在,则为真。
file1 -ot file2
如果file1比file2更老,或者file2存在而file1不存在,则为真。
-o optname
如果shell选项optname被启用,则为 "真"。 选项列表出现在
set
内置程序的-o选项的描述中(见1 Set 内置程序)。-v varname
如果shell变量varname被设置(已被赋值),则为 "真"。
-R varname
如果shell变量varname被设置了,并且是一个名字的引用,则为真。
-z string
如果string的长度为零,则为 "真"。
-n string
string
如果string的长度不为零,则为 "真"。
string1 == string2
string1 = string2
如果字符串相等,则为真。 当与
[[
命令一起使用时,这将执行上述的模式匹配(见5.2 条件性结构)。‘=’应与
test
命令一起使用,以达到POSIX的一致性。string1 != string2
如果字符串不相等,则为 "真"。
string1 < string2
如果string1在string2之前按字母顺序排序,则为真。
string1 > string2
如果string1在string2之后按字母顺序排序,则为真。
arg1 OP arg2
OP
是‘-eq’、‘-ne’、‘-lt’、‘-le’、‘-gt’或‘-ge’之一。如果arg1等于、不等于、小于、小于或等于、大于、大于或等于arg2,这些算术二元运算符分别返回真。arg1和arg2可以是正整数或负整数。 当与[[
命令一起使用时,arg1和arg2会作为算术表达式进行计算(见6.5 shell算术)。