質問: シェルスクリプトでエラー時にリトライ方法 下記のようなシェルスクリプトを作成したいと思っています。 apacheのアクセスログを確認し、 (1)httpステータスが200なら後続の処理を実行 (2)200以外ならエラーを表示させ、 200以外なら5回リトライして5回ともhttpステータス"200"が一度も返ってこなければ(grepに含まれていなければ)スクリプトを中止するような処理を行いたいです。 初心者でループ処理?リトライ処理?というのがよくわかっていなくて... 下記のようなスクリプトにどう手を加えたらいいかご教授いただけますでしょうか。 #!/bin/sh cd /xxx/apache/log if tail -n 5 access_$date.log grep "|200|" >/dev/null; then tail -n 5 access_$date.log grep "|200|" echo "httpステータスは200です" else echo "httpステータスは200以外です" exit fi : よろしくお願いします
回答: やりたいことが、やや不明ですが、スクリプトから推測すると、 (1)ログの最後5行にステータス200の行が1つでもあれば後続の処理を実行 (2)ログの最後5行にステータス200の行が1つもなければ、エラーを表示させ、処理を終了 ということでいいのでしょうか? ログのフォーマットが不明ですが、スクリプトだと項目区切りが「 | 」のようなので、それに習ってます。また、$date は適切に設定されているという前提です。 #!/bin/sh cd /xxx/apache/log if tail -n 5 access_$date.log | grep "|200|" >/dev/null; then echo "httpステータスは200です" else echo "httpステータスは200以外です" exit fi 後続処理