![在 ubuntu shell 腳本中使用 while 迴圈時發生錯誤](https://rvso.com/image/192247/%E5%9C%A8%20ubuntu%20shell%20%E8%85%B3%E6%9C%AC%E4%B8%AD%E4%BD%BF%E7%94%A8%20while%20%E8%BF%B4%E5%9C%88%E6%99%82%E7%99%BC%E7%94%9F%E9%8C%AF%E8%AA%A4.png)
我是 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