学科分类
目录
Linux编程

条件判断

在学习shell中的条件语句之前,需要先掌握shell条件判断语句的书写方法。

条件判断是条件语句的核心,Shell中通常使用test命令或[命令对条件进行判断,其判断的条件可以是命令或脚本。前文中提到,每个脚本程序的末尾最好加上exit命令,以便提供该脚本的返回值给其它脚本程序,而这些退出码往往应用于条件判断中。下面首先讲解test命令和[命令的使用方法。

test命令的语法格式如下:

test 选项 命令

假设要检测某个文件是否存在,可以使用如下语句进行判断:

if test –f file
thenfi

在此段代码中,条件语句会根据test命令的退出码来判断条件是否成立。

[命令与test命令功能相同,以上功能当然也可以使用[命令来实现。使用[命令检测某个文件是否存在的代码如下:

if [ -f file ]
then
…
fi

需要注意的是,[命令也是命令,命令与选项及参数之间应有空格,因此在“[]”符号与“[]”符号中的检查条件之间需要留出空格,否则将会产生错误。

在使用[命令时,then可以与if条件放在同一行,但使用这种格式时,需要使用分号“;”将条件语句与then分隔开来。示例代码如下:

if [ -f file ]; then
…
fi

Shell中的条件判断语句通常可以分为三类:字符串比较、算术比较和针对文件的条件测试。下面分别以表格的形式,列出这三类中较为常用的条件。

1、 字符串比较

字符串比较中较为常用的判断条件如表1所示。

表1 字符串比较

条件 说明
str1=str2 若字符串str1等于str2,则结果为真
str1!=str2 若字符串str1不等于str2,则结果为真
–n str 若字符串str不为空,则结果为真
–z str 若字符串str为空,则结果为真

2、 算术比较

算术比较中比较的内容一般为整数,常用的判断条件如表2所示。

表2 算术比较

条件 说明
expr1 –eq expr2 若表达式expr1与expr2返回值相同,则结果为真
expr1 –ne expr2 若表达式expr1与expr2返回值不同,则结果为真
expr1 –gt expr2 若表达式expr1返回值大于expr2返回值,则结果为真
expr1 –ge expr2 若表达式expr1返回值大于等于expr2返回值,则结果为真
expr1 –lt expr2 若表达式expr1返回值小于expr2返回值,则结果为真
expr1 –le expr2 若表达式expr1返回值小于等于expr2返回值,则结果为真
!expr 若表达式结果为假,则结果为真

3、 文件测试

文件测试中通常是针对文件的属性做出判断,常用的判断条件如表3所示。

表3 文件比较

条件 说明
-d file 若文件file是目录,则结果为真
-f file 若文件file是普通文件,则结果为真
-r file 若文件file可读,则结果为真
-w file 若文件file可写,则结果为真
-x file 若文件file可执行,则结果为真
-s file 若文件file大小不为0,则结果为真
-a file 若文件file存在,则结果为真

条件判断语句是Shell脚本编程的关键内容,读者应尽量掌握Shell脚本中条件判断语句的表示方法,以便实现灵活的Shell脚本。

点击此处
隐藏目录