Shellスクリプト

【Shellスクリプト】ループ処理「for」「while」について!

2020年4月5日

実際にスクリプトを書いていると同じ処理を何度もしないといけないことってありますよね?そのときに、条件分岐と繰り返し処理を組み合わせれば、特定の処理を指定した回数、処理してくれるようにすることが可能です。

一度覚えてしまえば便利なので、この機会に条件分岐と繰り返しをマスターしましょう。

この記事でわかること

  • ループ処理とは?
    • 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文の実行例)

結果としては表示されてはいませんが、変数の値が「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行目:「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が終了します。

よく読まれている記事

1

目次1 Shellとは?1.1 代表的なシェルの種類2 シェルスクリプトの違いとは? Shellとは? Shellとは、人間の理解できる言葉を機会へ伝えるプログラムです。 Linux環境でコマンドプロ ...

2

Linuxは主にサーバー用として利用されるOSです。大規模な基幹システムの開発者、ロボットや家電開発等の組み込み系エンジニア、ネットワーク機器やデータベースに携わるインフラエンジニアは触れることが多い ...

3

プログラミング言語を習得しようと思った時、必ずと言っていいほど候補として挙げられるのが「Java」というプログラミング言語です。 「Java」は、現在日本で最も使われている言語であり、非常に人気のある ...

4

この記事は、Linuxについて勉強している初心者の方向けに「Shellスクリプト」について解説します。最後まで読んで頂けましたら、Shellスクリプトはどのような役割を担っているのか?を理解出来るよう ...

-Shellスクリプト

Copyright© Beエンジニア , 2020 All Rights Reserved.