Table of Contents
forループ
同じ処理を繰り返したいときは、for文 や while文 を使います。このページでは for文 について説明します。
for文
まず、実際にfor文を使った例を示します。次の例では処理を5回繰り返します。
#!/bin/bash for val in 1 2 3 4 5 do echo "${val}回目の処理です" done
実行結果
1回目の処理です
2回目の処理です
3回目の処理です
4回目の処理です
5回目の処理です
2回目の処理です
3回目の処理です
4回目の処理です
5回目の処理です
for文の構成は次のようになります。
#!/bin/bash for ループ変数 in 値リスト do 処理 done
for文では、値リストに指定した数値や変数を左から順にループ変数(この例ではval)に代入し、do から done の間の処理でそれを利用できます。ループ変数は呼び出さなくても構いません。ただ5回繰り返したいだけであれば、次のような書き方もできます。
#!/bin/bash for val in 1 1 1 1 1 do echo "繰り返し処理です" done
実行結果
繰り返し処理です
繰り返し処理です
繰り返し処理です
繰り返し処理です
繰り返し処理です
繰り返し処理です
繰り返し処理です
繰り返し処理です
繰り返し処理です
変数でループ
変数を値リストに設定する場合は次のようになります。
#!/bin/bash abc=10 def=20 ghi=50 for val in ${abc} ${def} ${ghi} do echo "${val}です" done
実行結果
10です
20です
50です
20です
50です
値リストに設定した変数の中身が文字列の場合、スペースで区切られてループ変数に代入されます。
#!/bin/bash abc="This is an apple." def="That is an orange." ghi="1 2 3 4 5" for val in ${abc} ${def} ${ghi} do echo ${val} done
実行結果
This
is
an
apple.
That
is
an
orange.
1
2
3
4
5
is
an
apple.
That
is
an
orange.
1
2
3
4
5
ループ処理の中断
ループ処理を途中で中断させたいときには break という命令文を使います。次の例は、1 から数値を順番に足していき、合計が 20 を超えた段階で処理を中断します。
#!/bin/bash for val in 1 2 3 4 5 6 7 8 9 do sum=$((sum + val)) echo "現在の合計値は${sum}です" if ((sum > 20)) then echo "20を超えたので中断します" break #これが実行された時点でループ処理自体が終了する fi done
実行結果
現在の合計値は1です
現在の合計値は3です
現在の合計値は6です
現在の合計値は10です
現在の合計値は15です
現在の合計値は21です
20を超えたので中断します
現在の合計値は3です
現在の合計値は6です
現在の合計値は10です
現在の合計値は15です
現在の合計値は21です
20を超えたので中断します
特定のループ処理をスキップする
continue という命令文を使って、特定のループだけ処理をとばすことができます。次の例では、ループ変数の値が 4 のときに 変数val の値を表示する処理をとばします。
#!/bin/bash for val in 1 2 3 4 5 do if ((val == 4)) then continue #これが実行されると、これより下の文は実行されず、次のループ処理に入る fi echo ${val} done
実行結果
0
1
2
3
5
1
2
3
5
別のfor文の書き方
使用しているシェルが bash であれば、次のような他のプログラミング言語で見られるfor文の形を使うことができます。括弧が二重であることに注意してください。
#!/bin/bash for ((i = 0; i < 10; i++)) do echo ${i} done
実行結果
0
1
2
3
4
5
6
7
8
9
1
2
3
4
5
6
7
8
9
練習問題
for文を使って、以下の条件を満たすシェルスクリプトを作ってください。
- シェルスクリプトに実行時引数(数は任意)を渡すと、一つずつ改行して全て表示される。
答え(クリックで開く)
#!/bin/bash for val in ${@} do echo ${val} done