
Я новичок в написании сценариев оболочки и пытаюсь изучить цикл 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