ошибка при использовании цикла while в скрипте оболочки Ubuntu

ошибка при использовании цикла while в скрипте оболочки Ubuntu

Я новичок в написании сценариев оболочки и пытаюсь изучить цикл while в сценарии оболочки Ubuntu. Script.sh

#!/bin/bash
#Initializing two variables
#while loop

echo while loop
a=0
while [ $a -lt 10 ]
do 
echo $a
a=$(a + 1) 
done

Выход -

vscoder@vscoder-VirtualBox:~$ ./script.sh
while loop
0
./script.sh: line 10: a: command not found
./script.sh: line 7: [: -lt: unary operator expected
vscoder@vscoder-VirtualBox:~$ 

Я понятия не имею, в чем ошибка. Кто-нибудь, пожалуйста, помогите мне с проблемой.

решение1

Вот что происходит:

  • первый раз через цикл while, a == 0поэтому [ $a -lt 10 ]true
  • мы входим в цикл и выполняемa=$(a + 1)
  • потому что этоЗамена командынетАрифметическое расширение, оболочка
    • пытается выполнить программу aс аргументами +и1
    • a: command not foundвыдается ошибка
    • стандартный вывод подстановки команды присваивается переменной a: это пустая строка
  • мы возвращаемся назад и снова проверяем условие
    • поскольку $aэто пустая строка, и поскольку мы используем [not [[, и поскольку $aне заключено в кавычки, оболочка видит это:[ -lt 10 ]
    • -ltне является унарным оператором (см.командаtestиУсловные выражения Bash), и выдается сообщение об ошибке
    • [завершается с ненулевым статусом, поэтому whileцикл прекращается.

решение2

При сравнении необходимо изменить и назначить переменную

#!/bin/bash
echo while loop
a=0
while [[ $a -lt 10 ]]
do
echo $a
a=$(($a+1))
done

Связанный контент