Mac シェルスクリプト:
for の使い方、基本構文、サンプル

informatics/mac/shellscript_for
2018/03/02 更新


  1. 概要: for とは
  2. for の基本構文
  3. リストの詳細
    • ls の結果を読み込んでリストにする
    • テキストファイルを読み込んでリストにする

広告

概要: for とは

Mac では、ターミナル にコマンドを入力することで、さまざまな操作を行うことができる。あるファイルに複数のコマンドを書き込み、そのファイルを実行するという手順を踏むことになる。この一連のコマンドを シェルスクリプト という。

このページでは、同じ作業を繰り返し行うときに使われる for について述べる。上記のリンクのほか、以下のようなページと関係が深い。


for の基本構文

for variable in list
  do
    Commands
  done


が基本形。緑で示した for, in, do, done は不変。variable, list, Commands に実際の変数やコマンドを入れる。

まずは簡単な実例を見てみて、次に variable や list の書き方をまとめる。


実例 1: 最初の簡単な実例

for var in 1 2 3
  do
    echo $var
  done


これを実行すると、以下の結果が出力される。

1
2
3


ここでのポイントは、

  • var という変数に、1, 2, 3 の 3 つの数字が格納されている。
  • echo は、次にくる文字列をそのまま出力するコマンドである。
  • var という変数を dodone の間で読み込んで使いたいときには $var とする。
  • 1 順目の実行で、リストの最初にくる 1 が読み込まれ、コマンドに従い処理される (つまり 1 と出力される)。
  • done に到達すると、次の変数 (つまり 2) について同じ処理を行う。
  • これが、リストの最後まで繰り返される。

広告

リストの詳細

リストの作成は、for 文のキーポイントの一つである。基本ルールは以下の通り (1)。

  • スペース区切り、またはタブ区切りの文字列をリストに読み込める。
  • 配列を読み込むことも可能。

応用的な方法についても


ls の結果をリストに読み込む

実際に ls を使うよりも、以下のスクリプトでフォルダごと指定する方が応用例が広いだろう。in に直接 test というフォルダパスを入れることで、そのフォルダに含まれるファイル名が全て出力されるようになる。

for var in ~/Desktop/test/*
  do
    echo ${var}
  done


{ } で var を囲わなくても、同じ結果になる気がする。

ls を使いたいならば、

for var in `ls ~/Desktop/test/`
  do
    echo ${var}
  done


とする。ここで ` はクオーテーションの ' ではないので注意しよう。


Text file をリストに読み込む

いくつか方法がある。一番単純なのは、cat を使うことだろう。

for var in `cat ~/Desktop/test.txt`
  do
    echo ${var}
  done


テキストファイルを上から 1 行ずつ処理したかったので、whole read line の方が便利だった。これも強力なコマンド。いずれ独立したページを作るが、基本的に使い方は以下。

  • line が変数として扱われ、do と done は同じ。つまり ${line} に対して処理を実行する。line でなく別の言葉にしても普通に動く。
  • read は改行コードまでを読む。よって、テキストファイルの最終行にも改行コードが必要 (2)。
  • array=(word) で、単語を配列 array に格納することができる (3)。

広告

コメント欄

一言コメントをどうぞ! (基本500字まで - 100字のページもあるかも)


このコメント欄は各ページにあるので、いつ管理人がコメントを見ることになるのか分かりません。内容について質問がある場合は、下のリンク先のフォームから質問頂ければ、早めに返信するようにします。


References

  1. シェルの繰り返し処理の使い方について (for と while). Link: Last access 2018/03/02.
  2. テキストを1行ずつ読み込んで処理するシェルスクリプト. Link: Last access 2018/03/06.
  3. テキストファイルを配列に読み込む. Link: Last access 2018/03/06.