Linux Shell中的条件表达式/比较运算符

Bash版本为4.1.5,可以man bash得到更多的信息,在里面找到对"CONDITIONAL EXPRESSIONS"的描述。

对于文件/字符串/数字分别有不同的条件表达式。(由于Bash也是将数字当成字符串处理的,所以数字的比较也可以用字符串的条件表达式。)

注意:

1. 字符串的比较用=, !=之类的,数字的比较用eq, gt之类的;

2. 字符串的“等于“比较,为了与POSIX一致,在[]中请用"=".(尽管"=="也可以可以用的);

3. 字符串的>, <比较运算符,一般放在[[ ]]之中,而不是test ("[]");

4. 字符串的>, <比较的结果,与本地的locale有关,是按照其字典序列进行比较的。

下面对Bash中的条件表达式做个知识点的记录,然后附上一个简单的Bash测试脚本。

运算符                                         描述                                   示例
文件比较运算符

-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 ]

string1 < string2        如果string1在本地的字典序列中排在string2之前,则为真     [[ $myvar < "one" ]]

string1 > string2        如果string1在本地的字典序列中排在string2之后,则为真     [[ $myvar > "one" ]]

算术比较运算符

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 ]

逻辑运算符

expr1 -a expr2 与 [ 1 -eq 1 -a 1 -ne 2 ]

expr1 -o expr2 或 [ 1 -ne 1 -o 1 -ne 2 ]

! expr1 非 [ ! -f myfile ]

 

一个测试脚本实例:

master

Stay hungry, stay foolish.

发表评论

邮箱地址不会被公开。 必填项已用*标注

*