シェルスクリプトのwhileとdoの間

シェルスクリプトのwhileとdoの間

うまく動作する次のスクリプトがあります。

!/bin/bash

a=12
while [ $a -gt 10 ]
do
    echo "$a"
    a=$(($a-1))
done
echo "done"

「do」の上に「echo Something」行を追加すると、その行に構文エラーが表示されることが予想されます。迂回するようで[ $a -gt 10 ]無限ループになります。どうすればこれが起こりますか?

ベストアンサー1

~からバッシュマニュアル:

while

このコマンドの構文は次のwhileとおりです。

しかし、テストコマンド;する後続のコマンド;
完璧
consequent-commands終了ステータスが0の間test-commands 実行されます。戻り状態は、最後に実行されたコマンドの終了状態、またはconsequent-commands実行されたコマンドがない場合は0です。

メモ: test-commands複数形。テストでは複数のコマンドを使用できるため、以下はコマンドリストを[ $a -gt 10 ]; echo "$a"テストとして使用する完全に有効なループです。

while [ $a -gt 10 ]
echo "$a"
do
   a=$(($a-1))
done

コマンドは[ $a -gt 10 ]失敗したり失敗したりすることはできませんがecho(テキストの書き込みに失敗したり他のエラーが発生しない限り)(ほぼ)常に成功します。決定的なテストコマンドの終了状態は常に成功し、ループは常に実行されます。

おすすめ記事