この章では、Unixにおけるシェルループについて説明します。ループは、一連のコマンドを繰り返し実行できる強力なプログラミングツールです。この章では、シェルプログラマが利用できる以下のタイプのループについて検討します。
- whileループ
-
#!/bin/sh a=0 while [ $a -lt 10 ] do echo $a a=`expr $a + 1` done
実行時には、次の結果が表示されます。
0 1 2 3 4 5 6 7 8 9
- forループ
-
#!/bin/sh for var in 0 1 2 3 4 5 6 7 8 9 do echo $var done
実行時には、次の結果が表示されます。
0 1 2 3 4 5 6 7 8 9
- untilループ
-
#!/bin/sh a=0 until [ ! $a -lt 10 ] do echo $a a = `expr $a + 1` done
実行時には、次の結果が表示されます。
0 1 2 3 4 5 6 7 8 9
- selectループ
-
#!/bin/ksh select DRINK in mint cofee water juice appe all none do case $DRINK in mint|cofee|water|all) echo "飲めます" ;; juice|appe) echo "家にあります" ;; none) break ;; *) echo "ERROR: 未選択" ;; esac done
selectループで表示されるメニューは次のようになります。
$./test.sh 1) tea 2) cofee 3) water 4) juice 5) appe 6) all 7) none #? juice 家にあります #? none $
状況に応じて異なるループを使用します。たとえば、whileループは、指定された条件が真になるまで、指定されたコマンドを実行します
ネストループ
すべてのループはネスト概念をサポートしています。つまり、あるループを別の同様のループ内に置くことができます。このネストは、要件に応じて無制限に実行できます。
whileループのネストの例を示します。他のループは、同様の方法でプログラミング要件に基づいて入れ子にすることができます。
ループ中のネスティング
もう一方のループの本体の一部としてwhileループを使用することは可能です。
例
ループネストの簡単な例を次に示します。ループ内に別のカウントダウンループを追加して、9までカウントしてみましょう。
#!/bin/sh a=0 while [ "$a" -lt 10 ] # this is loop1 do b="$a" while [ "$b" -ge 0 ] # this is loop2 do echo -n "$b " b=`expr $b - 1` done echo a=`expr $a + 1` done
これにより、次の結果が得られます。ここでecho -nがどのように動作するかを注意することが重要です。ここで-nオプションを指定すると、エコーは改行文字を印刷しないようにします。
0 1 0 2 1 0 3 2 1 0 4 3 2 1 0 5 4 3 2 1 0 6 5 4 3 2 1 0 7 6 5 4 3 2 1 0 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0