次の条件に従って、15秒後に最大5回の実行を再試行するロジックをシェルスクリプトに書きたいと思います。「ステータスコード=失敗」いくつかの問題が原因で失敗した場合。
ベストアンサー1
for i in 1 2 3 4 5; do command && break || sleep 15; done
"command"を希望のコマンドに置き換えます。これは、「状態コード=失敗」がゼロ以外の戻りコードを意味すると仮定する。
多様性:
構文を使用してください{..}
。ほとんどのシェルでは機能しますが、BusyBoxでは機能しませんsh
。
for i in {1..5}; do command && break || sleep 15; done
seq
失敗したコマンドの終了コードを使用して渡します。
for i in $(seq 1 5); do command && s=0 && break || s=$? && sleep 15; done; (exit $s)
上記と同じですが、sleep 15
最終失敗後にスキップしました。最大ループ数を一度だけ定義するのが最善であるため、ループの先頭で休止を実行するだけですi > 1
。
for i in $(seq 1 5); do [ $i -gt 1 ] && sleep 15; command && s=0 && break || s=$?; done; (exit $s)