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 でも私の質問に答えてくれるものは見つかりませんでした。また、x が 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 に答える