bash中变量不等式的正确语法是什么?

时间:2013-05-27 17:05:14

标签: bash if-statement inequalities

我对bash有点新意,所以请原谅我所做的任何天真的问题或说法。

所以我编写了一个快速脚本,列出了所有的输出颜色,并且效果非常好。它看起来像这样:

unset x; for i in {1..256}; do tput setab $x; echo $x; x=$((x+1)); done

但是我想使用小于/等于而不是我上面所做的。我尝试过这样的一堆东西:

unset x; if [ $x -le 256] ; do tput setab $x ; echo $x ; x=$((x+1)) ; done

而且:

unset x; if [ $x -le 256] then do tput setab $x ; echo $x ; x=$((x+1)) ; done

但我无法正确使用语法,只是说出了意想不到的令牌"已完成"或"做"。谷歌没有帮助我,也没有在Stack Overflow上找到任何回答我问题的东西。此外,我希望能够在它达到256之后取消设置x,然后继续重复脚本,这样看起来很糟糕。所以,是的,如果有人能帮助我,我会感激,谢谢。

2 个答案:

答案 0 :(得分:2)

if块不能成为do循环的条件。请改用while。此外,当您unset x时,$x将被取消定义,无法与数字进行比较。我想你真的想要这样的东西:

unset x
x=1
while [ $x -le 256 ]; do
  tput setab $x
  echo $x
  x=$((x+1))
done

最后一个表达式(x=$((x+1)))可以简化为((x++))。并且,正如Uwe指出的那样,方括号前后必须有空格(除了在右方括号和分号之间),否则bash将无法正确解析语句。

但是,如果你只是在循环的每个循环中递增$x,这种方法在for循环中没有任何优势:

for x in {1..256}; do
  tput setab $x
  echo $x
done

答案 1 :(得分:1)

只有完整性,您才能将第一个例子写成:

for i in {1..256}
do
        tput setab $i
        echo $i
done

因此,您可以直接使用$i,而不需要使用/增加$x