シェルスクリプト

シェルスクリプトで任意の回数ループするときの書き方

更新日:

シェルスクリプトで任意の回数ループするとき書き方について紹介したいと思います。他のやり方もあると思いますが、ここで紹介する方法を知っていれば実用的には十分だと思います。

なお、ここで紹介する例はどれも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の算術式展開も使っ値ます。

いかがでしたでしょうか。どのやり方を使うかは環境や好みやによると思います。他の人が書いたスクリプトを読むこと多いなら、ここに書かれたスクリプトは参考になるのではないかと思います。

-シェルスクリプト

Copyright© アナグマのモノローグ , 2021 All Rights Reserved Powered by STINGER.