使用$'的Bash脚本中的数字if语句

时间:2014-06-23 14:53:29

标签: bash

我写了一个简短的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

我希望这个剧本输出真实和法尔斯的混合物,但它只输出真实。我已检查并看到$(($(($ i - $ j))&gt; 1))正确生成0和1,因为它应该但显然if语句没有注册这些并且总是假设&#34 ;真&#34;

我的代码中遗漏了什么?

非常感谢

詹姆斯

2 个答案:

答案 0 :(得分: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

请注意,$中变量的((...))前缀的使用是可选的。

答案 1 :(得分: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