2014-01-23 88 views
1

我做对比在外壳脚本比较在外壳脚本

   if [ $# -lt 10 ] 
       then 
       echo "PROCEED" 
       else 
       echo "STOP" 

我运行脚本./test.sh 1 2 3 4 5 6 7 8 9 10 11 则输出为 “STOP” 而不是使用“-lt”如果我用“<”

   if [ $# < 10 ] 
       then 
       echo "PROCEED" 
       else 
       echo "STOP" 

然后输出“继续”。

我的问题是在shell脚本的情况下,如果我比较不大于10导致此问题。 请指导我

回答

0

可以看出在Advanced Bash Shell Scripting Guide - 7.3. Other Comparison Operators

字符串比较

<

不足,在ASCII字母顺序

如果[ “$ A” <“$ b“]]

if [“$ a”\ <“$ b”]

请注意,“<”需要在[]构造内转义。

因此,要做到这一点是-lt或引用再次:

整数比较

-lt小于

如果[“$ A “-lt”$ b“]

<小于(在双括号)

(( “$ A” < “$ B”))

+0

如果我使用if [“$ a”\ <“$ b”],那么它应该工作是你建议。 – user3013022

+0

不,它只适用于字符串比较。它可能会得到很好的输出,但只是基于ASCII。我的意思是你必须使用'lt'。 – fedorqui

+0

我用“(”括号代替“[”这个if。(($#<10))并且问题解决了 – user3013022

0

比较数字时,您需要使用<而不是-lt,因为-lt会进行STRING比较。

+0

如果我使用“<”,那么输出应该是STOP,但输出是“PROCEED” – user3013022

0

请注意,猛砸使用的buildin “测试” 的实施,人的测试 - >link

这也是在这里eplained - >Stackoverflow Link

支架通常用于命令重定向的角度! link

如果您正在比较整数,则使用-lt低于。