我对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,然后继续重复脚本,这样看起来很糟糕。所以,是的,如果有人能帮助我,我会感激,谢谢。
答案 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
。