一.概述
接着上篇讲的结构化命令,最后讲到了test命令的另一种写法 if [ condition ],它的语法格式如下:
--格式如下:
if [ condition ]
then
commands
fi
第一个方括号之后和第二个方括号之前必须加上一个空格,否则就会报错。test命令可以判断三类条件:(1)数值比较(2)字符串比较(3)文件比较。
1.1 数值比较
比较 |
描述 |
例如 |
n1 -gq n2 |
检查n1是否与n2相等 |
N1 ==N2 |
n1 -ge n2 |
检查n1是否大于或等于n2 |
N1 >=N2 |
n1 -gt n2 |
检查n1是否大于n2 |
N1 < N2 |
n1 -le n2 |
检查n1是否小于或等于n2 |
N1 <=N2 |
n1 -lt n2 |
检查n1是否小于n2 |
N1 <N2 |
n1 -ne n2 |
检查n1是否不等于n2 |
N1 !=N2 |
下面测试脚本中,第一个条件使用 -gt, value1是否大于value2。 第二个条件使用-eq 测试value1 是否与value2相等。
但涉及到浮点数时,就会出错,bash shell 只能处理整数,如下所示:
对于浮点数处理,在前面章节中讲过使用bc 命令,下面脚本中先用bc来判断,如果条件成立则返回1, 条件不成立返回0, 下面的var1变量返回为1,输出了echo语句信息。
1.2 字符串比较
比较 |
描述 |
str1 = str2 |
检查str1是否与 str2 相同 |
str1 != str2 |
检查str1是否与 str2 不同 |
str1 < str2 |
检查str1是否比 str2 小 |
str1 > str2 |
检查str1是否比 str2 大 |
-n str1 |
检查str1的长度是否非0 |
-z str1 |
检查str1的长度是否为0 |
(1) 字符串相等案例, 相等成立,输出了echo 信息。不等于案例就不在演示。
(2) 字符串比较
对于字符串比较,在编程中很少使用,这里不在演示。 比较是使用标准的ascii顺序。
(3) 字符串大小
使用-n 和 -z 可以检查一个变量是否有数据,如下所示变量value1的值不为空,条件成立。
下面一个案例是 value1变量从未被定义过, 判断长度是否为0, 未被定义的变量但长度仍然是0,输出了if then中的echo信息。
总结:空的和未初始化的变量会对shell脚本测试造成空难性的影响,如果不确定一个变量的内容,最好在将用于数值或字符串比较之前先通过-z来测试变量是否有值。 下面案例中valu1变量未定义,value2变量内容为空,value3变量内容不为空, 分别输出信息如下: