【bash】for文の使い方をわかりやすく解説
こんにちは。
普段はIT業界についてのブログを執筆してるエンジニアです。
» 参考:プログラマーの年収は200万円以下です【IT業界の残酷な成功法則】
» 参考:【一生使える本です】bashの解説書 厳選3選【おすすめ】
今回は、bashについての解説記事です。
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ループを用いて数字をインクリメントする
具体例
例: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ループでファイル操作を行う
ループ処理を使ってディレクトリ内のファイルを操作していきます。
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文は、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の使い方 - もくじ
シェルとは
- シェルとは
- シェルはOSと会話するための言語
- シェルの種類(bash以外のシェル)
- シェルスクリプトとは
- シェルスクリプトの書き方条件式
- if else文
- 文字列の比較
- &&と||の使い方
- case文文字列操作
- 文字列の連結
- 文字列の一部を切り出す繰り返し
- for文
- while文
- while文でリストから1つ要素ずつ処理する定数
- 定数の定義
関数
- 関数の定義
デバッグ
実行権限
本
「今の会社を辞めて転職します。エンジニア職に強みのあるおすすめの転職サイト・転職エージェントを教えて欲しい。また好条件で転職するにはどうすれば良いですか?」こんな悩みに答えます。 ITエンジニアに強いおすすめの転職サイト・転職エージェント3選 転職成功には強くてニューゲームが条件。どうやって実現する?