2013/08/02

シェルスクリプトでループ

シェルスクリプトでループ処理をする場合、 最も多用するのは while だと思う。
良く見かけるのは次の様な書き方だろう。

    :
while true
do
    処理
    if 条件
    then
        break
    fi
done
    :
    
勿論この書き方でも問題なく動作するが、 条件がコマンドの戻り値の場合は以下の方が簡潔に記述できる。
コマンドの戻り値が 0 (正常終了の場合) ループを続けたい場合。
    :
while コマンド
do
    処理
done
    :
    
コマンドの戻り値が 0 以外(正常終了以外の場合) ループを続けるのであれば while の替わりに until が利用できる。
例えば再起動中のリモートサーバに ssh (1) 接続したい場合、 以下の方法で繰り返し接続を試行する事ができる。
until ssh -o 'ConnectTimeout 5' リモートサーバ
do
    sleep 10
done
    
ssh (1) が成功するとリモートサーバから exit した時点で until の条件が真になるのでループを抜ける事ができる。


Copyright © Mitzyuki IMAIZUMI 2008,2009. All rights reserved.