本文へスキップ
BecomeCoder

シェルスクリプトコース · 第5章 繰り返し · レッスン20

for ― 並べた値を1つずつ処理する

ブラウザで完結

導入

for は「用意した値を、1つずつ変数に入れて、同じ処理を繰り返す」ための道具です。シェルの for はカウンタを回すというより、リストをなめるもの——この感覚がしっくりくると使いこなせます。

説明

型はこうです。

#!/bin/bash

for name in 佐藤 鈴木 高橋; do
  echo "$name さん、こんにちは"
done

echo "---"

# ファイル名を1つずつ処理する(実務でいちばん多い形)
for file in files/*.txt; do
  echo "処理中: $file"
done
  • for 変数 in 値1 値2 … … 値を空白区切りで並べる
  • dodone … 繰り返す中身
  • ループの中では $変数 で今の値を取り出す
flowchart TD
    A["for name in 佐藤 鈴木 高橋"] --> B{"次の値はある?"}
    B -->|"ある"| C["name に次の値を入れる"]
    C --> D["do 〜 done の中を実行"]
    D --> B
    B -->|"ない"| E["done(ループ終了)"]

値の並べ方には、いくつも書き方があります。

書き方意味
for f in a b c直接並べる
for f in files/*.txtファイル名の展開(一致したファイルの分だけ回る)
for i in $(seq 1 5)1〜5 の連番
for arg in "$@"スクリプトに渡された引数すべて

files/*.txt のような書き方を ファイル名展開(グロブ) と呼びます。シェルが実行前に、一致する実際のファイル名へ置き換えてくれます。「ディレクトリ内の全ファイルを処理する」が、たった1行で書けるということです。

やってみよう

スクリプトを実行して、3人の名前と3つのファイルが順に処理されることを確かめましょう。次に files/*.txtfiles/* に変えて実行し、memo.md も対象に入ることを確認してください。ファイル名展開が「その場のファイル状況」で決まることが体感できます。

演習

for$(seq 1 3) を使って、1回目 2回目 3回目 と順に表示してください。

ヒント1を見る

for i in $(seq 1 3); dodone の形です。

ヒント2を見る

ループの中は echo "${i}回目"

実際に動かしてみよう

本文のサンプルや演習のコードは、コードブロック右上の「コピー」ボタンでコピーして、下のエディタに貼り付ければそのまま実行できます。

シェルスクリプト(シミュレート)

スクリプトを書くエディタと、それを動かす仮想シェルを読み込みます(本物のbashではなく、動きを再現した学習用の環境です)。
スクロールして表示された時点でも自動で読み込まれます。