2014-01-23 162 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低於。