連載
» 2018年06月22日 05時00分 公開

Linux基本コマンドTips(218):【 for 】コマンド(応用編その3)――回数を指定して繰り返し処理を行う

本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、同じ処理を繰り返し実行する「for」コマンドです。

[西村めぐみ,@IT]
「Linux基本コマンドTips」のインデックス

Linux基本コマンドTips一覧

 本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は同じ処理を繰り返し実行する「for」コマンドです。

forコマンドとは?

 「for」は、何かの条件を指定して、繰り返し処理を行う際に使うbashの内部コマンドです。「1から10まで」のように具体的に数を指定して繰り返す他、ファイル全体の数が分からなくても、指定したファイル1つ1つに対して処理を実行したいときに使います。

 forコマンドは主にシェルスクリプトで使用します。しかし、コマンドラインで複数ファイルに対して同じ処理を施すときにも役立ちます。



forコマンドの書式

for 変数 in リスト; do コマンド; done

for ((式1; 式2; 式3)); do コマンド; done

※do以下のコマンドを複数書く場合は「;」で区切る。「;」の位置で改行できる。
※「変数 in リスト」の使い方については、連載第215回を参照。





forの主なオプション

 forコマンドにはオプションはありません。



回数を指定して実行する(1)

 forコマンドは、繰り返し処理の回数を指定できます。書き方は「for ((式1; 式2; 式3))」です。

 例えば、「for ((i=0; i<5; i++))」であれば、「iが0の状態から始める」「iが5より小さい間繰り返す」「iを1ずつ増やす」という意味です。つまり、i=0からi=4まで5回繰り返します。

 「i++」の「++」は「1増やす」処理を実行する演算子です。2ずつ増やしたい場合は「i=i+2」または「i+=2」のように書きます。

 以下のコマンド実行例では全て、do〜doneの間を5回実行します。ここでは、カウントに使用している変数「i」の内容をechoコマンドで表示しています。

 なお、変数「i」は回数を数えるために使用しているだけで、do〜doneの中で使用する必要は特にありません。さらに変数名は任意です。変数「count」を使うのであれば「for ((count=0; count<5; count++))」のようにします。式1、式2、式3全て同じ変数を使う点に注意してください(※3)。

 なお、画面1では「;」の後ろの空白を省略しています。

※3 例えば、「for ((i=0; i<5; count++))」のように、式3だけ違う変数を使うと、式2(i<5)がいつまでも真(TRUE)となり、終了しない。



コマンド実行例

for ((i=0; i<5; i++)); do echo [$i]; done

(iが0から4まで5回処理を繰り返す)

for ((i=0; i<10; i=i+2)); do echo [$i]; done

(iが0から8まで5回処理を繰り返す)

for ((i=0; i<10; i+=2)); do echo [$i]; done

(iが0から8まで5回処理を繰り返す)


画面1 画面1 繰り返し回数を指定してforコマンドを実行したところ


回数を指定して実行する(2)

 回数を指定する方法は他にもあります。例えば、bashのブレース展開(※4)を使い、「for 変数 in {開始..終了}」のように指定できます。{0..4}であれば0〜4の5回、{a..c}であればa、b、cの3回という意味になります。

 この他、seqコマンド(第110回)を使ってもよいでしょう。「for i in `seq 5`」であれば1〜5の5回となります。0から4としたい場合は「for i in `seq 0 4`」のように指定します。

※4 波かっこ(ブレース)「{」「}」で囲んだ文字列を展開するbashの機能をブレース展開と呼ぶ。例えば、「echo {1..8..2}」の出力は、「1 3 5 7」となり、「echo a{b,c,d}e」は「abe ace ade」となる。「echo {a,b}{x,y}」であれば、「ax ay bx by」だ。



コマンド実行例

for i in {0..4}; do echo [$i]; done

(iが0から4まで5回処理を繰り返す)

for i in `seq 5`; do echo [$i]; done

(iが1から5まで5回処理を繰り返す)


画面2 画面2 bashのブレース展開やseqコマンドを使って繰り返し実行回数を指定したところ


筆者紹介

西村 めぐみ(にしむら めぐみ)

PC-9801NからのDOSユーザー。PC-486DX時代にDOS版UNIX-like toolsを経てLinuxへ。1992年より生産管理のパッケージソフトウェアの開発およびサポート業務を担当。著書に『図解でわかるLinux』『らぶらぶLinuxシリーズ』『Accessではじめるデータベース超入門[改訂2版]』『macOSコマンド入門』など。2011年より、地方自治体の在宅就業支援事業にてPC基礎およびMicrosoft Office関連の教材作成およびeラーニング指導を担当。


Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。