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
