うまく動作する次のスクリプトがあります。
!/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
(テキストの書き込みに失敗したり他のエラーが発生しない限り)(ほぼ)常に成功します。決定的なテストコマンドの終了状態は常に成功し、ループは常に実行されます。