このエントリーをはてなブックマークに追加

Bashにおける制御構文の中でもループを実現する構文の説明です。

for文

コマンドなどを指定回数実行するといった場合にはfor文を使うことができます。 for文の基本の形は以下のようになります。

for i in 変数1 変数2 変数3…
do
    実行文
done

変数X(変数1~)の数だけ実行文が繰り返されます。この時、変数iには実行毎に変数Xが代入されます。

for i in 1 2 3 4 5
do
    echo $i
done

このようなループによって、以下の出力を得ることができます。

1
2
3
4
5

while文

条件が満たされている限り(真である間)実行文を繰り返すにはwhileを使用します。 whileの基本的な構文は以下の通りです。

while 条件式
do
    実行文
done

条件式の内容が真(0)である限り、実行文が繰り返され、条件式の内容が偽(0以外)になるとループが停止します。

条件式では評価関数であるtestやその簡易表記である[ ]などが利用されます。 以下ではSTOP_CONDITIONという変数が0より大きい限りechoで表示をする例を示しています。

STOP_CONDITION=5
while [ $STOP_CONDITION -gt 0 ]
do
    echo "STOP_CONDITION : "$STOP_CONDITION
    STOP_CONDITION=$(( $STOP_CONDITION - 1 ))
    sleep 1
done

この出力は以下のようになります。

STOP_CONDITION : 5
STOP_CONDITION : 4
STOP_CONDITION : 3
STOP_CONDITION : 2
STOP_CONDITION : 1

このようにwhileループは、適切に停止条件を設定して停止させる必要があります。逆に、停止条件が適切に設定されていない場合は無限ループに陥ります。 ここでは処理が分かりやすいようにsleepを入れましたが、実際にshellスクリプトを記述して十分デバッグが出来ていない時に念のためsleepを入れておくと、大暴走を防いだりできるので有効なテクニックでもあります。条件判定を誤ると簡単に無限ループにはまって、ほかのユーザに大迷惑をかけてしまうことがありますので注意してください。

なお、意図的に無限ループを作る場合もあります。

while true
do
    echo "loop"
    sleep 1
done

このようなループを記述することで、1秒おきに"loop"という出力を永遠に繰り返します。

until文

while文の逆でuntilは条件式が満たされない限り実行文を繰り返します。 until文の基本的な書式は以下のようになります。

while 条件式
do
    実行文
done

条件式の内容が偽(0以外)である限り、実行文が繰り返され、条件式の内容が真(0)になるとループが停止します。

STOP_CONDITION=5
until [ $STOP_CONDITION -lt 0 ]
do
    echo "STOP_CONDITION : "$STOP_CONDITION
    STOP_CONDITION=$(( $STOP_CONDITION - 1 ))
    sleep 1
done

この時の出力は以下のようになります。

STOP_CONDITION : 5
STOP_CONDITION : 4
STOP_CONDITION : 3
STOP_CONDITION : 2
STOP_CONDITION : 1
STOP_CONDITION : 0



記事一覧へ