Geek-Side

Resource > for

for文を使うと繰り返し処理を行うことができます。

for 変数 in リスト ; do
    処理
done

1から10を足していく処理をfor文を用いて書くと、下記のようになります。

for_list () {
    for i in 1 2 3 4 5 6 7 8 9 10; do
	ret=`expr $ret + $i`;
    done
    echo "答えは $ret" です;
}

1から10までの数字をすべて書いているので面倒くさいですね。
seq関数を用いて、第一引数から第二引数までの数字を展開するようにしています。

for_seq () {
    for i in $(seq $1  $2); do
	ret=`expr $ret + $i`;
    done
    echo "答えは $ret" です;
}

# for文で1から10まで展開されるように引数で渡します
for_seq 1 10

$@変数を用いて呼び出し側で展開された値を受け取る方法もあります。

for_seq_arg () {
    for i in $@; do
	ret=`expr $ret + $i`;
    done
    echo "答えは $ret" です;
}

# 呼び出し側でseq関数を用いる。
for_seq_arg $(seq 1 10)

breakで途中でループを抜ける


breakを使えば、ループ処理を途中で抜けることができます。
下記の例では、10を超えると強制的にループ処理を抜けるようにif文が追加されています。

for_break () {
    for i in $@; do
	if [ $i -gt 10 ] ; then
	    break;
	fi
	ret=`expr $ret + $i`;
    done
    echo "答えは $ret" です;
}

# 1から100まで渡しているが、結局10までしか処理されない。
for_break $(seq 1 100)

continueでループ処理をスキップする


continueを使えば、ループ処理をスキップすることができます。
下記の例では、偶数の場合はループ処理をスキップするようにif文が追加されています。

for_continue () {
    for i in $@; do
	if [ `expr $i % 2`  -eq 0 ] ; then
	    continue;
	fi
	ret=`expr $ret + $i`;
    done
    echo "答えは $ret" です;
}

# 偶数の場合のみ足されるので答えは25になります。
for_continue $(seq 1 10)