Какой правильный синтаксис для переменных неравенств в bash?

Я немного новичок в 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 не помог мне, и я не нашел ничего, что ответило на мои вопросы здесь, на переполнении стека. Кроме того, я хотел бы иметь возможность отключить x после того, как он достигнет 256, а затем повторять сценарий, чтобы он выглядел триплетно. Так что да, если бы кто-нибудь мог помочь, я был бы благодарен, спасибо.

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++)), И, как указал Уве, должны быть пробелы до и после квадратных скобок (кроме заключительной квадратной скобки и точки с запятой), в противном случае bash не сможет правильно проанализировать утверждение.

Однако, если вы просто увеличиваете $x с каждым циклом цикла этот подход не имеет никакого преимущества перед for цикл:

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

Только для полноты вы можете написать свой первый пример как:

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

Таким образом, вы можете использовать непосредственно $i и не нужно использовать / увеличивать $x,

Другие вопросы по тегам