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

関連情報