コマンドラインで繰り返し制御

繰り返し制御するからこそ、コンピュータの活用と言えます。ムーアやポラックの法則のとおり、コンピュータの処理能力は年々向上していくと思います。対して、人間の計算能力はいくら訓練しても、進化するコンピュータにどんどん引き離されていくのは明白です。人の時は有限ですので、同じ作業は繰り返さず、単純作業の繰り返しなど雑用は全部コンピュータに任せたいものです。コンピュータに使われる人ではなく、コンピュータを使う人になりましょう。

コマンドラインで繰り返し制御する方法は多々ありますが、bash(v4.3で確認しています)での、かつ一部の機能を使って行きたいと思います。

まずは、1〜10までの数字を表示する繰り返し制御です。forコマンドを使って、C言語風に書くことができます。

~$ for((i=1;i<=10;i++));do echo $i;done
1
2
3
4
5
6
7
8
9
10
~$

ちなみに私は、コマンドライン上で()等の括弧を使うのを好みません。
シフトキーを押す必要があるからです。せっかくコマンドラインを使うのだから、さくさくキー入力したいのです。

また、for〜inを使うことで、空白で区切った要素の数だけ繰り返しをすることができます。

~$ for i in AAA BBB CCC;do echo $i;done
AAA
BBB
CCC
~$

bashブレース展開や、コマンド単体で数列を生成することもできます。

~$ echo {1..10}
1 2 3 4 5 6 7 8 9 10
~$ seq 10
1
2
3
4
5
6
7
8
9
10
~$

for〜inと{}やseqを併用することで、for((;;))と同じように繰り返し制御することができます。

~$ for i in {1..10};do echo [$i]`expr $i \* $i`;done
[1]1
[2]4
[3]9
[4]16
[5]25
[6]36
[7]49
[8]64
[9]81
[10]100
~$ for i in `seq 10`;do echo [$i]`expr $i \* $i`;done
[1]1
[2]4
[3]9
[4]16
[5]25
[6]36
[7]49
[8]64
[9]81
[10]100
~$ 

{1..10}の書き方の方が分かりやすいかもしませんが、私はバッククォートを使う`seq 10`の方を好んでよく使います。seqではなく他コマンドを使う場合、たとえば`find`と変更するとき、バッククォートを使う癖をつけていると、コマンド入力の打ち間違いが少なくなるからです。

繰り返し制御するにはfor以外にもwhileが使えます。:(コロン)を指定すると常に真となり無限ループになります。

~$ while :;do date +%T;sleep 1;done
12:26:32
12:26:33
12:26:34
12:26:35
12:26:36
^C
~$ 

whileには条件式を書くことができますが、コマンドラインではあえて無限ループしか使わないようにしています。

Leave a Reply

Your email address will not be published. Required fields are marked *

CAPTCHA