実際にスクリプトを書いていると同じ処理を何度もしないといけないことってありますよね?そのときに、条件分岐と繰り返し処理を組み合わせれば、特定の処理を指定した回数、処理してくれるようにすることが可能です。
一度覚えてしまえば便利なので、この機会に条件分岐と繰り返しをマスターしましょう。
この記事でわかること
- ループ処理とは?
- for文とは?
- while文とは?
ループ処理とは?
ループ処理とは、簡潔に説明すると、処理を繰り返すための制御文です。処理を繰り返すための制御文には、主に「for」文と「while」文が用いられます。ただし、シェルスクリプトでは複雑な繰り返し処理はwhile文を使用し、簡単な繰り返しの制御にfor文を用いることが多いです。
ループ処理は、ほとんどの場合「if」と同時に用いられ、「test」コマンドを使用してその後の挙動を指定します。
下記に「for」文及び、「while」文について、それぞれ説明します。
for文とは?
for文は、for直後の変数名に、in直後に羅列したワードリスト( 値 1 値 2…)を順番に代入しながら、「do」から「done」によって囲まれた処理を実行するループする構文です。
C言語やjavaではカウンタを使ってカウンタの分だけ繰り返しますが、シェルスクリプトではワードリストを使って繰り返し処理をするという違いがあります。ただし、bashの場合はC言語やjavaと同じような記述にも対応しています。
コマンドの書式
for 変数 in ワードリスト
do
処理...
done
for文に対応した記述例)
for i in a b c d
do
if [ "${i}" = "b" ]; then
echo ${i}
fi
done
実際にfor文に対応したシェルスクリプトを記述記述してみます。これから作成するシェルスクリプトは、ワードリスト(「a」「b」「c」「d」)の順にループ処理を行い、変数の値が「b」の時のみ、変数の値をコンソールへ出力します。
for文の実行例)
1 2 3 4 5 6 7 |
[root@CentOS7 bin]# for i in a b c d > do > if [ "${i}" = "b" ]; then > echo ${i} > fi > done b |
結果としては表示されてはいませんが、変数の値が「b」の時、コンソールへの出力処理が終了した後も、ループ処理は(変数「d」が終了するまで)続いています。ハッキリいって無駄な処理です。
そこで使用されるのが「break」コマンドと「continue」コマンドです。
「continue」で処理のスキップが行え、「break」コマンドで、ループ処理から抜け出すことが可能です。「break」コマンドと「continue」コマンドは、予め組み込みコマンドとして、Linuxへ標準で用意されているコマンドです。
ベテランエンジニアとエンジニア初心者の差は、無駄な処理の後始末に顕著に表れます。ループ処理の実装時、それ以降必要のないロジックは、「スキップ」、もしくは「ループから抜ける」等、なるべく無駄を省く実装を心がけましょう。
while文とは
while文は、条件文の実行結果が真であるかぎり、ループ中の処理を繰り返し実行する構文です。一番最後の終了コードが「0」か「0以外」かを判定し、「0」なら「do」から「done」によって囲まれた処理を実行するループ構文です。
コマンドの書式
while コマンドリスト
do
処理...
done
while文に対応した記述例)
count=1
while [ ${count} -lt 3 ]
do
echo ${count}
count=$(expr ${count} + 1)
done
while文に対応したスクリプトの実行例)
1 2 3 4 5 6 7 8 |
[root@CentOS7 bin]# count=1 [root@CentOS7 bin]# while [ ${count} -lt 3 ] > do > echo ${count} > count=$(expr ${count} + 1) > done 1 2 |
1行目:「count」という変数を用意し、これに数値の「1」を代入します。
2行目:「count」の値が3より小さいかどうかを調べます。
4行目:この結果は真(3より小さい)ので、echoコマンドでその値「1」を出力します。
5行目:「count」の値に1を加えます。これで1回目のループが終了し、判定文のところに戻ります。
2行目:「count」の値は2になっていますが、まだ3より小さいのでもう一度doの中の処理を実行します。
4-5行目:echoで2を表示し、1を加えます。2回目のループが終了し、whileの判定文に戻ります。
2行目:「count」は3になっているため、「3より小さい」という条件に対しては偽となり、0以外(false)を返します。この時点で、whileが終了します。
Shellスクリプト基礎知識(全11記事+1)
├─シェルスクリプトの基本事項!
├─変数と特殊変数について!
├─演算子「算術演算子」「比較演算子」について!
├─条件分岐「if」「case」について!
├─ループ処理「for」「while」について!
├─文字列置換「bash」「sed」について!
├─複数行のテキスト出力!ヒアドキュメントについて!
├─書式?戻り値?シェルスクリプト内の関数について!
├─シェルの組み込みコマンドについて!
├─クォートとは?コマンド置換とは?実現方法と内容の違いについて!
└─リダイレクトとは?標準入力・出力、標準エラー出力等について!
(補足)シェルスクリプトの設計書とは?必要な項目や書き方等を解説!