シェルスクリプトで任意の回数ループするとき書き方について紹介します。他のやり方もあると思いますが、ここで紹介する方法を知っていれば実用的には十分です。
なお、ここで紹介する例はどれも10回ループして0から9を表示します。
for文とseqコマンドを組み合わせた方法
まず1つ目の例は、for文とseqコマンドを使った方法です。
#!/bin/sh for i in `seq 0 9` do echo $i; done
次の形式のseqコマンドは、FIRSTからLASTまでの数字をセパレーター(デフォルトは改行文字)で区切って表示します。
seq FIRST LAST
したがって、この例の「`seq 0 9`」の部分は、0から9までの改行で区切られた数字のリストに置き換えらます。
for文では順にそのリストの要素をiに代入して、本体でiの値を表示します。リストを全て処理し終えたらfor文は終了します。
この例のスクリプトはsh(Bourne Shell)でも実行可能です。
while文を使った方法
次はwhile文を使った例です。この例もsh(Bourne Shell)で実行できます。
#!/bin/sh i=0 while [[ $i -lt 10 ]] do echo $i; i=`expr $i + 1` done
while文を使う方法はタイプ量がやや多いですが、やりたいことを素直に書いた方法だと思います。
while文は変数iが10より小さい間、本体を実行します。ポイントは変数iをインクリメントする次の部分です。
i=`expr $i + 1`
変数iの値を1増加して、それをまた変数iに代入しています。Bourne Shellでインクリメントするときの定番の書き方です。
Bashで実行するならこの後の例のような書き方をしても構いません。
Bashのブレース展開を使う方法
最後の例はBashの機能を使う方法です。したがってこのシェルスクリプトはBashで実行する必要があります。
#!/bin/bash for i in {0..9} do echo $((i++)); done
{0..9}の部分は「0 1 2 3 4 5 6 7 8 9」に置き換えられます。これはブレース展開と呼ばれ、Bourne Shell以外のB系シェルでは大抵使えるようです。
この例では変数iの値をインクリメントするのにBashの算術式展開も使っ値ます。
まとめ
いかがでしたでしょうか。どのやり方を使うかは環境や好みやによると思います。
他の人が書いたスクリプトを読むこと多いなら、ここに書かれたスクリプトは参考になるのではないかと思います。