【bash】for文の使い方をわかりやすく解説

シェル/bash

bashのfor inループについて調べる人

bashのfor inループについて調べる人
「bashでfor in文を使用したいのですが、使い方を忘れてしまいました。正しい方法を知りたいのと、コピペできるソースコード例も欲しいです。」

こんな悩みを解決します。

bashのfor in文は、有限のループ処理を行いたい時に用いるフレーズです。無限ループの場合にはwhile true文を用います。

本記事の内容

この記事を書いている私はIT業界歴12年、年収1,000万円ちょっとの金融系エンジニアです。IRIXやSolarisなどのUnixやCygwin、mac、Linuxなど様々な環境でbashによるスクリプティングを行ってきました。

bashは極めて簡単なプログラミング言語ですが、空白の有無などで構文エラーとなること、javaなど一般的なプログラミング言語に慣れている方にとっては直感的ではない構文であることから、忘れてしまうことも多いかと思います。

あと、Qiitaとかに入門者が書いたメモの記事ですと、構文が間違っているケースがあり、少し複雑な文字列の処理ですとエラーとなってしまう書き方も散見されますので、正しい情報を発信したいと思い、記事にしました。

また本記事では、細かい構文に迷ったら、例からコピー&ペーストして使えることも目指しました。少しでもお役に立てますと幸いです。

1.for inループを用いて数字をインクリメントする

bashのfor inループを使用する

具体例

例:for inループで1 10までを順に出力する

#!/bin/bash
for x in {1..10}
do
 echo $x
done
 

実行結果は以下の通りです。

1
2
3
4
5
6
7
8
9
10

これでbashのfor in文を用いて繰り返し処理を実現できました。

逆順

例:for inループで1 3までを逆順に出力する

#!/bin/bash
for x in {3..1}
do
 echo $x
done
 

実行結果は以下の通りです。

3
2
1

2.for inループでファイル操作を行う

bashのfor inループでファイル操作を行う

ループ処理を使ってディレクトリ内のファイルを操作していきます。

for in文を用いたファイルの連続作成

具体例

例:カレントディレクトリ内のfile1.txt file5.txtまで順に作成する
なお、ファイルの作成にはtouchコマンドを使います。

#!/bin/bash
for x in {1..5}
do
 touch "file${x}.txt"
done
ls
 

実行結果は以下の通りです。ファイルが5つ作成されました。

file1.txt
file2.txt
file3.txt
file4.txt
file5.txt

for in文を用いたファイルのバックアップ

具体例

例:カレントディレクトリ内のファイル(.txt)のバックアップ(.backup)を作成する

#!/bin/bash
for x in `ls`
do
 cp $x ${x/.txt/.backup}
done
ls
 

この例ではlsコマンドでファイル名を一つ一つ取得し、拡張子部分(.txt)を置換した.backupファイルをcpコマンドでコピーで生成しています。

実行結果は以下の通りです。

file1.txt
file2.txt
file3.txt
file4.txt
file5.txt
file1.backup
file2.backup
file3.backup
file4.backup
file5.backup

なお、for in文の繰り返し条件としてファイル名を一つ一つ指定して記述しても同じ結果になります。

#!/bin/bash
for x in "file1.txt" "file2.txt" "file3.txt" "file4.txt" "file5.txt" 
do
 cp $x ${x/.txt/.backup}
done
ls
 

3.for inの二重ループを使う

bashでfor inの二重ループを使う

bashのfor in文は、c言語やjavaのように二重ループにして処理を行うこともできます。

具体例

二重ループを用いてディレクトリとその中にファイルを作成する例を示します。ディレクトリ名はdir1 5、ファイル名はwindows.txt、mac.txt、linux.txtです。

  • 外側のループ(変数:x)でディレクトリを作成する
  • 内側のループ(変数:y)でファイルを作成する
#!/bin/bash
for x in {1..5}
do
 mkdir dir${x}
 for y in "windows" "mac" "linux"
 do
  touch "dir${x}/${y}.txt"
 done
done
find dir*
 

実行結果は以下の通りです。各ディレクトリ内に3つのファイルが作成されました。

dir1
dir1/linux.txt
dir1/mac.txt
dir1/windows.txt
dir2
dir2/linux.txt
dir2/mac.txt
dir2/windows.txt
dir3
dir3/linux.txt
dir3/mac.txt
dir3/windows.txt
dir4
dir4/linux.txt
dir4/mac.txt
dir4/windows.txt
dir5
dir5/linux.txt
dir5/mac.txt
dir5/windows.txt

今回は以上です。あまり使わないので説明を省略してしまいましたが、for in文ではcontinue句を用いて特定の処理だけを中断して続行したり、break句を用いてループ処理そのものを中断してしまうこともできます。

本記事がbashでfor in文を利用する際の参考になりましたら幸いです。

Blog TOP  シェルスクリプトを勉強したい人向け|bashの使い方 記事まとめ

bashの使い方 - もくじ

bashの使い方 - もくじ

シェルとは

 - シェルとは
 - シェルはOSと会話するための言語
 - シェルの種類(bash以外のシェル)
 - シェルスクリプトとは
 - シェルスクリプトの書き方

条件式

 - if else文
 - 文字列の比較
 - &&と||の使い方
 - case文

文字列操作

 - 文字列の連結
 - 文字列の一部を切り出す

繰り返し

 - for文
 - while文
 - while文でリストから1つ要素ずつ処理する

定数

 - 定数の定義

関数

 - 関数の定義

デバッグ

 - デバッグオプション(-x)

実行権限

 - 実行権限のないシェルスクリプトファイルを実行する

 - シェルスクリプトの書籍3選