シェルスクリプト for文

12月 25, 2009

for文は値のリストを1つずつ指定された変数に代入し、複数の値に対して繰り返し
命令を実行する。スクリプトの実行時に複数の引数が与えられた場合、それらの引数を
1つずつ処理していく用途などで利用する。

for文パターン
for文

最初に変数にarg1の値を代入して命令を実行し、それが終了したら次も変数に
arg2を代入して命令を実行し、リストが終了するまで繰り返す。
if文同様にdoとdoneの前には改行または「;」(セミコロン)が必要。
また、for 行のin以降は省略可能で、省略した場合in “$@”と同様となる(つまり引数全て)。
ただし、その場合でもきちんとfor var in “$@”と記述するのが望ましい。
以下は、スクリプト内で引数を指定せず「$@」とし、処理結果をoutfileにリダイレクトさせる例。

for_out1.jpg
(for_out.sh)

引数を「/bin/*」としてスクリプトを実行時し、outfileの中身を確認した例。

for_out2.jpg

もうひとつのfor文記述例
for文には以下のような実行方法もある。

for_other.jpg

二重括弧内の説明を。
「初期設定」はfor文の開始時に読み込まれる。「条件」で繰り返し処理を継続する/しないを判別する。
「更新処理」はdoからdoneの間の処理が一回終わるごとに実行される。以下スクリプト例。

#! /bin/bash
for ( ( i = 10 ; i > 0 ; i — ) )
do
echo $i
done


初期設定「i = 10」で変数iに数値10をセット。
条件「i > 0」は変数iが0より大きい間を指示。
更新処理「i–」は条件が真の間、do〜doneの処理が
終わった後に変数iから1を減算するよう指示。
以下の実行結果を見ると、代入された変数10から始まり、
0になった時点で処理が終了している。

以下、上記スクリプトfor10.sh実行結果。

$ ./ for10.sh
10
9
8
7
6
5
4
3
2
1


補足
cshにはfor文が実装されていないため、同様のループ処理を行うには似た書式のforeach文を利用する。


Categories: shell