2014-06-23 29 views
0

我寫了一個簡短的bash腳本:

for j in 0 1 2 3 4 5 
    do 
     for ((i=$j; i <= 5; i++)); 
     do 
      if [ $(($(($i - $j)) > 1)) ]; then 
       echo "True" 
      else 
       echo "False" 
      fi 
     done 
    done 

我希望這個腳本輸出Trues和Falses的混合物但它只輸出Trues。我已經檢查並看到$(($(($ i - $ j))> 1))正確地產生了0和1,因爲它應該是這樣,但顯然if語句沒有註冊這些並且總是假定爲「真」。

我在代碼中丟失了什麼嗎?

非常感謝您

詹姆斯

+0

'$(($(($ I - $ j)段)> 1))'武漢理工大學?試試這個'((i - j> 1))' –

+2

'if if((i - j> 1)); then' – devnull

回答

2

你的腳本檢查if [ 0 ]if [ 1 ]這是不是你的想法。它將始終返回true,因爲它檢查字符串01的長度不爲零。

將其更改爲:

for j in {0..5} 
do 
    for ((i=j; i<=5; i++)) 
    do 
     if ((i - j > 1)) 
     then 
      echo True 
     else 
      echo False 
     fi 
    done 
done 

注意內((...))使用$前綴變量是可選的。

0

您使用if錯誤,您正在測試的字符串長度,當你想要一個算術比較:

for j in {0..5}; do 
    for i in $(seq $j 5); do 
     if ((i - j > 1)); then 
      echo "True" 
     else 
      echo "False" 
     fi 
    done 
done