条件判断
在学习shell中的条件语句之前,需要先掌握shell条件判断语句的书写方法。
条件判断是条件语句的核心,Shell中通常使用test命令或[命令对条件进行判断,其判断的条件可以是命令或脚本。前文中提到,每个脚本程序的末尾最好加上exit命令,以便提供该脚本的返回值给其它脚本程序,而这些退出码往往应用于条件判断中。下面首先讲解test命令和[命令的使用方法。
test命令的语法格式如下:
test 选项 命令
假设要检测某个文件是否存在,可以使用如下语句进行判断:
if test –f file
then
…
fi
在此段代码中,条件语句会根据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脚本。