在 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不是一元運算子(參見test命令Bash 條件表達式),並拋出錯誤訊息
    • [以非零狀態退出,因此while停止循環。

答案2

而比較需要改變和賦值變數

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

相關內容