
我是 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