![ошибка при использовании цикла while в скрипте оболочки Ubuntu](https://rvso.com/image/192247/%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B0%20%D0%BF%D1%80%D0%B8%20%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B8%20%D1%86%D0%B8%D0%BA%D0%BB%D0%B0%20while%20%D0%B2%20%D1%81%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D0%B5%20%D0%BE%D0%B1%D0%BE%D0%BB%D0%BE%D1%87%D0%BA%D0%B8%20Ubuntu.png)
Я новичок в написании сценариев оболочки и пытаюсь изучить цикл 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