我是 shell 脚本编写的新手,我正在尝试在 ubuntu shell 脚本中学习 while 循环。脚本.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
是未加引号的,所以 shell 会看到:[ -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