1、算术运算比较运算符(bash自身不能比较浮点数)
-eq 等于
[ $num1 -eq $num2 ]
-ne 不等于
[ 100 -ne $num1 ]
-lt 小于
[ 100 -lt `expr $num1 + $num2` ]
-le 小于或等于
[ 100 -le `expr $num1 \* $num2` ]
-gt 大于
[ 100 -gt `expr $num1 / $num2` ]
-ge 大于或等于
[ 100 -ge `expr $num1 % $num2` ]
2、字符串比较运算符
-z string 如果 string 长度为零,则为真
[ -z "`ps aux | grep mysql`" ]
-n string 如果 string 长度非零,则为真
[ -n "$string" ]
【注意】 $string 一定要放在双引号里面 "$string",否则使用 -n -z 的结果都为真!
string1 != string2 如果 string1 与 string2 不同,则为真
[ "$str1" != "Snail" ]
string1 == string2 如果 string1 与 string2 相同,则为真
[ "$str1" == "$str2" ]
(上面用一个 = 也可以,在严格的 POSIX 兼容下使用)
string1 string2 如果 string1 按字典顺序比较大于 string2,则为真
3、文件比较运算符
-a filename 如果 filename 存在,则为真
[ -e $HOME/.bashrc ]
-e filename (同上)
-b filename 如果 filename 存在,并且是块文件,则为真
[ -e /dev/loop0 ]
-c filename 如果 filename 存在,并且是字符文件,则为真
[ -e /dev/ttyS0 ]
-d filename 如果 filename 存在,并且为目录,则为真
[ -d /home/snail ]
-f filename 如果 filename 存在,并且为常规文件,则为真
[ -f /dev/ttyS0 ]
-g filename 如果 filename 存在,并且为set-group-id,为真
[ -f $HOME/ak47 ]
-h filename 如果 filename 存在,并且为符号连接,则为真
[ -h /bin/vi ]
-L filename (同上)
-k filename 如果 filename 存在,并且设置了sticky位,为真
[ -k /bin/ping ]
-p filename 如果 filename 存在,并且为有名管道(FIFO),真
[ -p /tmp/pipe ]
-r filename 如果 filename 存在,并且可读,则为真
[ -r /etc/passwd ]
-s filename 如果 filename 存在,并且大小不为零,为真
[ -s ./none-zero ]
-u filename 如果 filename 存在,并且为set-user-id,为真
[ -f $HOME/ak47 ]
-w filename 如果 filename 存在,并且可写,则为真
[ -w /var/log/mail ]
-x filename 如果 filename 存在,并且可执行,则为真
[ -x ./start.sh ]
下面这些不常用的:
-t fd 如果文件描述符被打开并指向一个终端,则为真 [ -t /proc/1/fd/10 ]
【提示】在 /proc/进程号/fd 下可以找到文件描述符:)
-O filename 如果 filename 存在,并且被有效用户ID所拥有,则为真
-G filename 如果 filename 存在,并且被有效组ID所拥有,则为真
-S filename 如果 filename 存在,并且为一个socket,则为真
[ -S /tmp/mysql.sock ]
-N filename 如果 filename 存在,并且在上次读取后被修改过,则为真
-o optname 如果 shell 选项 optname 被开启,则为真
【提示】使用 set -o 来查看
file1 -nt file2 如果 file1 比 file2 新,或者 file1 存在 file2 不存在,则为真
file1 -ot file2 如果 file1 比 file2 旧,或者 file2 存在 file1 不存在,则为真
file1 -ef file2 如果 file1 和 file2 都指向同样的设备(device)和索引节点号(inode numbers),则为真
【提示】查看文件的索引节点可以用 ls -i 选项
运算符
|
描述
|
示例
|
文件比较运算符
|
-e
filename
| 如果
filename存在,则为真
| [ -e /var/log/syslog ] |
-d
filename
| 如果
filename为目录,则为真
| [ -d /tmp/mydir ] |
-f
filename
| 如果
filename为常规文件,则为真
| [ -f /usr/bin/grep ] |
-L
filename
| 如果
filename为符号链接,则为真
| [ -L /usr/bin/grep ] |
-r
filename
| 如果
filename可读,则为真
| [ -r /var/log/syslog ] |
-w
filename
| 如果
filename可写,则为真
| [ -w /var/mytmp.txt ] |
-x
filename
| 如果
filename可执行,则为真
| [ -L /usr/bin/grep ] |
filename1-nt
filename2
| 如果
filename1比
filename2新,则为真
| [ /tmp/install/etc/services -nt /etc/services ] |
filename1-ot
filename2
| 如果
filename1比
filename2旧,则为真
| [ /boot/bzImage -ot arch/i386/boot/bzImage ] |
字符串比较运算符
(请注意引号的使用,这是防止空格扰乱代码的好方法)
|
-z
string
| 如果
string长度为零,则为真
| [ -z "$myvar" ] |
-n
string
| 如果
string长度非零,则为真
| [ -n "$myvar" ] |
string1=
string2
| 如果
string1与
string2相同,则为真
| [ "$myvar" = "one two three" ] |
string1!=
string2
| 如果
string1与
string2不同,则为真
| [ "$myvar" != "one two three" ] |
算术比较运算符
|
num1-eq
num2
| 等于 | [ 3 -eq $mynum ] |
num1-ne
num2
| 不等于 | [ 3 -ne $mynum ] |
num1-lt
num2
| 小于 | [ 3 -lt $mynum ] |
num1-le
num2
| 小于或等于 | [ 3 -le $mynum ] |
num1-gt
num2
| 大于 | [ 3 -gt $mynum ] |
num1-ge
num2
| 大于或等于 | [ 3 -ge $mynum ] |
阅读(529) | 评论(0) | 转发(0) |