
比较与测试
程序中的流程控制是由比较和测试语句来处理的。
我们可以用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中包含的是非空字符串,则返回真
注意:
在 = 号前后各有一个空格。如果忘记加空格,那就不是比较关系了,而变成了赋值语句。