shell 条件测试及字符串比较操作符
我说过,退出状态是if结构可以测试的唯一内容。呃,好吧,我承认这最初不是我说的,但是这并不影响其准确性~(不要扔砖头)
但是这并不意味着你只能以此检查命令是否运行正常,shell提供了[...]的结构可以测试各种条件的方式。
你也许听过test吧?其实内置的test就等同与[...]
例如,测试两个字符串是否相等,你既可以用test string1 = string2(没错,是一个等号),也可以用[ string1 = string2 ]
神奇吧?呵呵。。
[#condition#]实际上与其他语句一样,唯一不同的是它返回一个退出状态,给出condition是否为真的信息(”["符号后和“]”符号前的空格是必须的——这个必须有)。因而其也会适应if语法哦。
方括号将包含各种类型操作符的表达式阔气来。下面将列出字符串比较操作符
| 操作符 | 如果为真 |
|---|---|
| str1 = str2 | str1 匹配str2 |
| str1 != str2 | str1 不匹配str2 |
| str1 < str2 | str1 小于str2 |
| str1 > str2 | str1 大于str2 |
| -n str1 | str1 长度大于0 非null(空) |
| -z str1 | str1 为null(空) |
记住哦,这里是没有“大于等于”及“小于等于”的
这里字符串比较是按照ASCII字母顺序下来比较的
在"[....]“条件里面的“>”,”<"是需要转义的
使用-n在[]结构中测试必须要用""把变量引起来,形如:[ -n "$str1" ]
如下脚本,命名为bigger.sh
str1=$1
str2=$2
if [ $str1 \> $str2 ]; then
echo "str1 is bigger than str2"
else
echo "str1 not bigger than str2"
fi

shell_str_bigger
看代码,顺便说一下,分号是shell的标准语句分隔符——注意看if后面then的前面。
文章作者:simaopig
本文地址:http://www.xiaoxiaozi.com/2009/06/22/925/
版权所有 © 转载时必须以链接形式注明作者和原始出处!
[回复]
@粥小卜
呵呵,谢谢支持。。
[回复]