ループ処理(while,until)
今回はループ処理について説明します。
ループ処理はある一定条件の基に、同じ処理を反復して行う処理です。
bashでのループ処理は以下の3種類あります。
・ある条件が真の限り反復処理を行う「while」文
・ある条件が偽の限り反復処理を行う「until」文
・ある要素の数だけ反復処理を行う「for」文
これから説明いたしますが、「while」文と「until」文は条件的に真逆の意味ですので、同じ条件でも、条件文の書き方次第で、どちらでも利用できます。
同じ処理を違う条件で記述する為、一つのスクリプト内で「while」文と「until」文を混在させると、混乱を招きかねません。
混乱を避ける為、どちらか一方のループ処理に統一した方が良いでしょう。
一般的には「while」文を使う事が多いので、ここでは「while」文で統一します。
構文は以下の形になります。
・while文
while ループ継続条件 do ループ処理内容 done
・until文
until ループ終了条件 do ループ処理内容 done
・for文
for 要素代入変数名 in 要素 do ループ処理内容 done
どの構文も、ループ処理内容部分は do~doneで括ります。
この括られた部分を複数回処理する事になります。
今回はこのループ文の中でも一番使用頻度が多い、「while」文について説明します。
早速「while」文を書いてみましょう。
新たに「helloworld6.sh」を作成し、以下を記述してみて下さい。
#!/bin/bash
## 変数初期化
V_COUNTER=0 ## カウンタ初期化
## ループ処理
## 処理毎にカウンタを1増やす
## カウンタが5より低い場合ループ継続
while [ ${V_COUNTER} -lt 5 ]
do
echo "Hello World!!"
V_COUNTER=`expr ${V_COUNTER} + 1`
done
早速実行してみましょう。
# ./helloworld6.sh Hello World!! Hello World!! Hello World!! Hello World!! Hello World!! #
どうですか?
上記の様に「Hello World!!」と5回表示されましたでしょうか?
では、このスクリプトの説明をします。
まず、3行目でカウンタの初期化を行います。
V_COUNTER=0 ## カウンタ初期化
ループ処理でカウンタを使用する場合、必ず初期値の代入を行います。
8行目で「while」文を使用します。
while [ ${V_COUNTER} -lt 5 ]
ループ処理継続条件として、「カウンタが5より下」となっています。
カウンタは0からスタートですので、「0,1,2,3,4」の5個が該当します。
この数値判定を「test」コマンド([)を使用して行います。
9~12行目の間がループして処理を行う部分です。
do
echo "Hello World!!"
V_COUNTER=`expr ${V_COUNTER} + 1`
done
9行目の「do」と12行目の「done」を除いた10行目と11行目が
ループ毎に処理される内容となります。
10行目で「Hello World!!」を表示しています。
11行目でカウンタをインクリメント(1増加)しています。
この11行目の処理により、1回ループする毎にカウンタが1ずつ増加し、最終的にカウンタが5になった時点で、8行目のwhile文の継続条件から外れ、
ループ処理は終了となります。
ループ処理の概要は理解できましたでしょうか?
若干、蛇足となりますが、もし、上記処理を「until」文で実装した場合、以下の様になります。
#!/bin/bash
## 変数初期化
V_COUNTER=0 ## カウンタ初期化
## ループ処理
## 処理毎にカウンタを1増やす
## カウンタが5以上の場合ループ終了
until [ ${V_COUNTER} -ge 5 ]
do
echo "Hello World!!"
V_COUNTER=`expr ${V_COUNTER} + 1`
done
8行目の「until」文でのループ処理終了条件が「5以上」となります。
カウンタが5になった時点で終了というのは「while」文も「until」文も変わりありません。
「while」文と「until」文が条件付けだけで同じ処理を行うという事が理解していただけましたでしょうか。
次回は「for」文の解説です。
※ ループ処理とは別で、今回のスクリプトでいくつか新しく出てきた事があります。
「test」コマンドでの数値比較(8行目)と数値加算(11行目)です。
こちらについては、「bashスクリプト初級編 - testコマンドと戻り値 - 」と「bashスクリプト初級編 - コマンドの処理結果 -」で解説いたします。
