比较与测试

程序中的流程控制是由比较和测试语句来处理的。

我们可以用if,if else 以及逻辑运算符来执行测试,而用一些比较运算符来比较数据项。另外,有一个test 命令也可以用来进行测试。让我们来看看如何使用这些命令。


实战演练:

if 条件:
if condition;
then
commands;
fi

else if 和 else :
if condition;
then
commands;
elif condition;
then 
	commands
else
	commands
fi



if和else语句可以进行嵌套。if的条件判断部分可能会变得很长,但可以用逻辑运算符将它变得简洁一些:

[ condition ] && action; #如果condition为真,则执行action
[ condition ] || action; #如果condition为假,则执行action



&&是逻辑与运算符,||是逻辑或运算符。


算数比较

条件通常被放在封闭的中括号内。一定要注意在[或]与操作数之间是有一个空格的。如果不加,则脚本会报错。例如:

[ $var -eq 0 ] or [ $var -eq 0 ]



对变量值进行算数条件判断:

[ $var -er 0 ] #当$var等于0时,返回真
[ $var -ne 0 ] #当$var为非0时,返回真



其他重要的操作符如下所示:

-gt :大于
-lt :小于
-ge :大于等于
-le :小于等于



字符串比较

使用字符串比较时,最好使用双中括号,因为有时候采用单个中括号会产生错误,所以最好避开它们。

[[ $str1 = $str2 ]] :当str1等于str2时,返回真。也就是说,str1和str2包含的文本是一样的
[[ $str1 ==$str2 ]] :这是检查字符串是否相等的另一种写法
[[ $str1 != $str2 ]] :如果str1和str2不相同,则返回真



我们还可以检查字符串的字母序情况,具体如下所示:


[[ $str1 > $str2 ]] :如果str1的字母序比str2的大,则返回真
[[ $str1 < $str2 ]] :如果str1的字母序比str2的小,则返回真
[[ -z $str1 ]] :如果str1中包含的是空字符串,则返回真
[[ -n $str1 ]] :如果str1中包含的是非空字符串,则返回真


注意:

在 = 号前后各有一个空格。如果忘记加空格,那就不是比较关系了,而变成了赋值语句。