2

我对 bash 有点陌生,所以请原谅我做的任何幼稚的问题或笨拙的事情。

所以我写了一个列出所有 tput 颜色的快速脚本,而且效果很好。它看起来像这样:

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

但我无法正确使用语法,它只是说意外的标记“完成”或“做”。Google 没有帮助我,我也没有在 Stack Overflow 上找到任何可以回答我问题的内容。此外,我希望能够在它达到 256 后取消设置 x,然后继续重复脚本,这样它看起来就很迷幻。所以,是的,如果有人能帮助我,我会很感激,谢谢。

4

2 回答 2

3

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
于 2013-05-27T17:16:36.520 回答
1

仅出于完整性考虑,您可以将第一个示例编写为:

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

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

于 2013-05-27T21:13:47.147 回答