エラーが発生した場合は、whileループを終了します。

エラーが発生した場合は、whileループを終了します。

while次の形式のループがあります。

while :; do
   performTask1 || break
   performTask2 || break
   performTask3 || break
   ...
   performTaskX || break
done

基本的に、タスクの1つが間違っているたびにループから外したいと思います。これを達成するより良い方法はありますか?

他の方法は次のとおりです。

while :; do
   performTask1 && performTask2 ... && performTaskX || break
done

しかし、これはまだ私に醜いようです。

答え1

デフォルトでは、ジョブが失敗した場合は、後続のジョブを実行しないでください。中断することなく、前のタスクの正常な完了に基づいてタスクを依存させます。

while
  performTask1 &&
  performTask2 &&
  ...
  performTaskX-1 &&
  performTaskX
do :; done

すべてのタスクを1行に入れる必要はありません。私の考えでは、この形式は見苦しくありません。

答え2

set -e
while :; do
   performTask1
   performTask2
   performTask3
   ...
   performTaskX
done
set +e

これで終了します。フルスクリプトエラーがある場合。

これがスクリプトの最後の部分ではない場合は、次のものを使用できます。

while performTask1 &&
    performTask2 &&
    performTask3 &&
    ... &&
    performTaskX
do
  :
done

また見なさい:

関連情報