在 ubuntu shell 脚本中使用 while 循环时出错

在 ubuntu shell 脚本中使用 while 循环时出错

我是 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不是一元运算符(参见命令testBash 条件表达式),并抛出错误消息
    • [以非零状态退出,因此while停止循环。

答案2

而比较需要改变和赋值变量

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

相关内容