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,可写的脚本却出错了。的主要内容,如果未能解决你的问题,请参考以下文章

Shell中字符串数值的比较

Shell中字符串数值的比较

shell 中 if test 使用

shell 中 if test 使用

shell条件判断

shell脚本基础