本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は、同じ処理を繰り返し実行する「for」コマンドです。
本連載は、Linuxのコマンドについて、基本書式からオプション、具体的な実行例までを紹介していきます。今回は同じ処理を繰り返し実行する「for」コマンドです。
「for」は、何かの条件を指定して、繰り返し処理を行う際に使うbashの内部コマンドです。「1から10まで」のように具体的に数を指定して繰り返す他、ファイル全体の数が分からなくても、指定したファイル1つ1つに対して処理を実行したいときに使います。
forコマンドは主にシェルスクリプトで使用します。しかし、コマンドラインで複数ファイルに対して同じ処理を施すときにも役立ちます。
for 変数 in リスト; do コマンド; done
for ((式1; 式2; 式3)); do コマンド; done
※do以下のコマンドを複数書く場合は「;」で区切る。「;」の位置で改行できる。
※「((式1; 式2; 式3))」の使い方については、この後の連載で取り上げる。
forコマンドにはオプションはありません。
forコマンドは、同じような処理を繰り返し実行したいときに使います。特に、シェルスクリプトの中で、forコマンドを使った一連の処理のことを「for文」と呼ぶことがあります。
例えば、「for f in *.txt」のように指定することで、カレントディレクトリにある「*.txt」にあてはまるファイル全てに、do以降の処理を施すことができます。
ここでは変数名として「f」を選んでいますが、「for filename in *.txt」のように、任意の単語を使用できます(※1)。
変数の値を参照する際には場合は「$f」のように変数名の前に「$」記号を付けます(画面1)。
※1 変数名にはアルファベットと数字、「_」記号を使用できる。
for 変数 in リスト; do コマンド; done
(リストに対してコマンドを実行する)
for f in *.txt; do echo $f; done
(「*.txt」に該当するファイルの名前を1つずつ表示する)
forコマンドで複数の処理を実行したいときは「do コマンド1; コマンド2; コマンド3; done」のように「;」記号で区切ります。まずファイルAに対して、コマンド1、コマンド2、コマンド3の順に実行し、その後、ファイルBに対して同様に実行します。
画面2では複数の処理の例として、「echo ファイル名」と「head -1 ファイル名」を実行しています。headはテキストファイルの冒頭部分を出力するコマンドで、「-1」という指定によって、先頭の1行だけを画面に表示しています。
for f in *.txt; do echo $f; head -1 $f; done
(「*.txt」に該当するファイルの名前と先頭行を表示する)
画面2では「;」はコマンドの区切りを表しています。シェルスクリプト内でforコマンドを使った処理を書き下す場合は、「;」の位置で改行した方が読みやすくなるでしょう。
コマンドラインでも改行できます。改行した場合は、2行目以降に「>」というプロンプトが現れます(画面3、※2)。プロンプトの後に続きを入力し、doneの行の入力を終えると、処理が始まります。
※2 「>」はシェル変数「PS2」で定義されている記号。
for f in *.txt do echo $f head -1 $f done
西村 めぐみ(にしむら めぐみ)
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.