shell求助,数值比较-eq,-ne,-gt,-ge,-lt,-le。书上说的是:假值是零,真值为1,可写的脚本却出错了。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell求助,数值比较-eq,-ne,-gt,-ge,-lt,-le。书上说的是:假值是零,真值为1,可写的脚本却出错了。相关的知识,希望对你有一定的参考价值。
[jfhuang@localhost shell]$ ./sh05_
cat sh05_
test 1 -eq 1
echo "$?"
test 1 -ne 1
echo "$?"
test 1 -gt 1
echo "$?"
test 1 -ge 1
echo "$?"
test 1 -lt 1
echo "$?"
test 1 -le 1
echo "$?"
0
1
1
0
1
0
正解:$?是shell变量,表示"最后一次执行命令"的退出状态.0为成功,非0为失败.
切记:$?永远表示shell命令最后一次执行后的退出状态,当函数执行完毕后,如果又执行了其它命令,则$?不再表示函数执行后的状态,而表示其它命令的退出状态. 参考技术A 你的那本垃圾书赶紧丢掉吧
linux的shell与其它的语句一个很大甚至是完全相反的一点不同就是:返回结果为0表示真,其它任何值为假 参考技术B 估计你是看错了 ,正确的是 执行成功返回状态则为 "0";其他一切返回状态都是错误的,比如"1". 参考技术C 你看的什么书啊。我看到的这本书《轻松学用linux shell编程》里面也是这么说的,很郁闷 参考技术D 是不是你书上没看清楚,我也是个菜鸟,不过这个我知道,0是真,1是假,你可能书上没看清楚
Shell中字符串数值的比较
在shell中字符串与数值的比较方法是不同的,要注意区分
整数比较:
-eq 等于,如:if [ "$a" -eq "$b" ]
-ne 不等于,如:if [ "$a" -ne "$b" ]
-gt 大于,如:if [ "$a" -gt "$b" ]
-ge 大于等于,如:if [ "$a" -ge "$b" ]
-lt 小于,如:if [ "$a" -lt "$b" ]
-le 小于等于,如:if [ "$a" -le "$b" ]
< 小于(需要双括号),如:(("$a" < "$b"))
<= 小于等于(需要双括号),如:(("$a" <= "$b"))
> 大于(需要双括号),如:(("$a" > "$b"))
>= 大于等于(需要双括号),如:(("$a" >= "$b"))
字符串比较:
= 等于,如:if [ "$a" = "$b" ]
== 等于,如:if [ "$a" == "$b" ], 与=等价
注意:==的功能在[[]]和[]中的行为是不同的,如下:
1 [[ $a == z* ]] # 如果$a以"z"开头(模式匹配)那么将为true
2 [[ $a == "z*" ]] # 如果$a等于z*(字符匹配),那么结果为true
3
4 [ $a == z* ] # File globbing 和word splitting将会发生
5 [ "$a" == "z*" ] # 如果$a等于z*(字符匹配),那么结果为true
!= 不等于,如:if [ "$a" != "$b" ], 这个操作符将在[[]]结构中使用模式匹配.
< 小于,在ASCII字母顺序下.如:
if [[ "$a" < "$b" ]]
if [ "$a" < "$b" ] 在[]结构中"<"需要被转义.
> 大于,在ASCII字母顺序下.如:
if [[ "$a" > "$b" ]]
if [ "$a" > "$b" ] 在[]结构中">"需要被转义.
-z 字符串为"null".就是长度为0.
-n 字符串不为"null"
以上是关于shell求助,数值比较-eq,-ne,-gt,-ge,-lt,-le。书上说的是:假值是零,真值为1,可写的脚本却出错了。的主要内容,如果未能解决你的问题,请参考以下文章