按:这篇文章是很早之前发布在个人 Google Site 上的,已经不知具体时间了。在转移到本地时,有少许更新。
Bash 条件表达式分三类:文件,文本(字符串),数值。
先看一个例子:判断文件是否存在?
#!/bin/bash
if [ -e helloworld.sh ]
then
echo "helloworld.sh exists!"
else
echo "helloworld.sh does not exist!"
fi
这里用到的操作符是 -e
关于文件的操作符,主要都是一元操作符,也有几个二元的,详见下表
| 操作符 | 示例 | 说明 |
|---|---|---|
| -a | -a file | True if file exists. |
| -b | -b file | True if file exists and is a block special file. *[1] |
| -c | -c file | True if file exists and is a character special file. *[1] |
| -d | -d file | True if file exists and is a directory. |
| -e | -e file | True if file exists. |
| -f | -f file | True if file exists and is a regular file. *[2] |
| -g | -g file | True if file exists and its set-group-id bit is set. |
| -h | -h file | True if file exists and is a symbolic link. |
| -k | -k file | True if file exists and its “sticky” bit is set. |
| -p | -p file | True if file exists and is named pipe (FIFO). |
| -r | -r file | True if file exists and is readable. |
| -s | -s file | True if file exists and has a size greater than zero. |
| -t | -t fd | True if file descriptor fd is open and refers to a terminal. |
| -u | -u file | True if file exists and is writable. |
| -x | -x file | True if file exists and is executable. |
| -G | -G file | True if file exists and is owned by the effective group id. |
| -L | -L file | True if file exists and is a symbolic link. |
| -N | -N file | True if file exists and has been modified since it was last read. |
| -O | -O file | True if file exists and is owned by the effective user id. |
| -S | -S file | True if file exists and is a socket. |
| -ef | file1 -ef file2 | True if file1 and file2 refer to the same device and inode numbers. |
| -nt | file1 -nt file2 | True if file1 is newer (according to modification date) than file2 , or if file1 exists and file2 does not. |
| -ot | file1 -ot file2 | True if file1 is older than file2 , or if file2 exists and file1 does not. |
Linux 上的文件类型主要有下面几种:
| 操作符 | 示例 | 说明 |
|---|---|---|
| -z | -z string | True if the length of string is zero. |
| -n | -n string | True if the length of string is non-zero. |
| string | True if the length of string is non-zero. | |
| = | string1 = string2 | True if the strings are equal. ‘=’ should be used with the test command for POSIX conformance. |
| == | string1 == string2 | True if the strings are equal. |
| != | string1 != string2 | True if the strings are not equal. |
| < | string1 < string2 | True if string1 sorts before string2 lexicographically. |
| > | string1 > string2 | True if string1 sorts after string2 lexicographically. |
Bash 仅支持整数(正数,负数和0)。数值相关的条件操作符,都是二元操作符,列表如下:
| 操作符 | 等效操作符 | 示例 | 说明 |
|---|---|---|---|
| -eq | = or == | arg1 -eq arg2 | True if arg1 is equal to arg2 . |
| -ne | != | arg1 -ne arg2 | True if arg1 is not equal to arg2 . |
| -lt | < | arg1 -lt arg2 | True if arg1 is less than arg2 . |
| -le | <= | arg1 -le arg2 | True if arg1 is less than or equal to arg2 . |
| -gt | > | arg1 -gt arg2 | True if arg1 is greater than arg2 . |
| -ge | >= | arg1 -ge arg2 | Ture if arg1 is greater than or equal to arg2 . |
注意在使用上表第二列等效的操作符时,符号两边的数字要有空格。
| 操作符 | 示例 | 说明 | 说明 |
|---|---|---|---|
| -o | -o optname | True if the shell option optname is enabled. The list of options appears in the description of the -o option to the set builtin (see The Set Builtin). | True if arg1 is equal to arg2. |
| -v | -v varname | True if the shell variable varname is set (has been assigned a value). | True if arg1 is not equal to arg2. |
参 http://www.gnu.org/software/bash/manual/bashref.html#Bash-Conditional-Expressions