首页 > 代码库 > linux shell中的条件判断

linux shell中的条件判断

1. 退出状态


         在Linux系统中,每当一条命令执行完成后,系统都会返回一个退出状态,这个状态被存放在$? 这个变量中,是一个整数值,我们可以根据这个值来判断命令运行的结果是否正确。

         通常情况下,退出状态值为0,表示执行成功,不为0的时候表示执行失败。

 

POSIX规定的退出状态和退出状态的含义:

0       运行成功

1-255   运行失败,脚本命令、系统命令错误或参数传递错误

126     找到了该命令但无法执行

127     未找到要运行的命令

128     命令被系统强行结束

 

2. 测试命令


用test命令进行测试,expression是一个表达式:

test expression

 

为了提高可读性,可以使用另一种格式:

[ expression ]

需要注意的是大括号和表达式之间需要有一个空格,不能省略。这种方式和if、case、while等语句结合,可以作为shell脚本中的判断条件。

 

3. 整数比较运算符


         在shell中对两个数进行比较,不像在C/C++中可以使用“>”之类的运算符,而是使用类似参数选项的格式。

 

-eq 如果等于则为真

-ge 如果大于或等于则为真

-gt  如果大于则为真

-le  如果小于或等于则为真

-lt  如果小于则为真

-ne 如果不等于则为真

 

其中的参数可以这样理解e(equal),g(greater),t(than),l(less),n(not),这样方便记忆。

 

4. 字符串相关运算符


-n string          字符串不为空则为真

-z string          字符串为空则为真

string1 = string2    字符串相等则为真 (或者 == 也可以)

string1 != string2   字符串不等则为真

 

这里有一个需要注意的地方,就是使用 -n 这个运算符进行判断的时候需要注意在变量两边加上双引号。

例如 if [ -n $string ] 应该写成 if [ -n “$string” ] ,不然该表达式总是会返回真,因为当string变量为空的时候就相当于是 if [ -n ]。

 

5. 文件操作符


-d file 测试file是否为目录

-e file 测试file是否存在

-f file 测试file是否为普通文件

-r file 测试file是否是进程可读文件

-s file 测试file的长度是否不为0

-w file 测试file是否是进程可写文件

-x file  测试file是否是进程可执行文件

-L file 测试file是否符号化链接

 

6. 逻辑运算符


! expression   非

expression1 –a expression2  与

expression1 –o expression2  或

 

多重的嵌套:

例如 if [ $a == 1 ] && [ $b == 1 -o $b == 3 ]

linux shell中的条件判断