Ubuntu シェル スクリプトで while ループを使用するとエラーが発生する

Ubuntu シェル スクリプトで while ループを使用するとエラーが発生する

私はシェル スクリプトの初心者で、Ubuntu シェル スクリプトの while ループを学習しようとしています。Script.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 ]ます
  • ループに入り実行するa=$(a + 1)
  • これはコマンド置換ない算術拡張、 シェル
    • a引数を付けてプログラムを実行しようとすると+1
    • エラーa: command not foundがスローされる
    • コマンド置換の標準出力が変数に割り当てられますa。これは空の文字列です。
  • ループバックして条件を再度テストします
    • は空の文字列であり$a[not を使用しており[[、 は$a引用符で囲まれていないため、シェルは次のように認識します。[ -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

関連情報