forループで遊んでみる
前回レッスンでLinux と、for ループというちょっと長めの会話を交わしました。
ここでも引き続きfor ループを使ってLinuxと遊んでみます。
リストもコマンドで
for ループの書式はこうでした。
for ループの書式
for 変数
in リスト
do
コマンド
done
このリストの部分、前回は「1 2 3 a b c test あ」をターミナルに自分で入力していました。
キーボードから手打ちして作ったリストをfor ループによってecho で標準出力に出力したわけですが・・・・・、よく考えてみるとなんかバカバカしいですよね?(笑)
たとえばもう一回、for ループを試してみたいとき、ターミナルにまたリストを手入力するのは、ホネが折れます。
なので今回は、このリストもコマンドにやってもらいましょう。
使うコマンドは、seq です。
まずはseq コマンドがどんなものか?試してみます。
ターミナルに以下のように入力してください。
seq コマンド
seq 10
こんな感じに出力されたと思います。

前回やったfor ループの出力結果と似ていますよね。
seq は連番を出力するだけのコマンドです。拍子抜けしました??(笑)
引数に渡した数だけ連番を作ってくれます。seq 100 なら100個の連番をターミナルに出力しますので、ちょっといろいろ試してみてください。
このseq の出力をリストにして、for ループを回してみましょう。for の書式にどうやって組み込めばいいでしょうか??
コマンド置換
”for 変数 in リスト” のin の後ろがリストでした。ここにseq の結果をバチッと嵌め込むには、次のようにします。
コマンド置換でリストを作成
for item in $(seq 10)
do
echo $item
done
photo.1 で入力したコマンドを$( )の中に書くと、その結果をその位置に吐き出すことができるのです。
これをコマンド置換(command substitution)といいます。便利ですね(笑)。
それでは、上のfor ループをそのままターミナルに入力して、実行してみてください。
結果はどうなりましたか?
たぶんですが、あまり面白いとはいえない結果だったと思います。
ループ処理で10回繰り返したのは、echo ですから。lesson 11でやったのと変わり映えがしません。
for ループでファイルを作成
echo は標準出力に表示するだけなので、ここでちょっと別のコマンドをループで回してみましょう。
touch でファイルをたくさん作るってのはどうでしょうか?
作業ディレクトリのfirst_dir/directory_01 に入って、そこに20個。ファイルを作ってみます。
for loop でファイルを一気に20個作る
for name in $(seq 20)
do
touch $name
done

どうでしたか?、ちゃんとphoto.2 のようになりましたか?
今までに登場してきたコマンドを駆使してますよ(笑)
pwd でカレントディレクトリを確認してから、for ループで20個のファイルをtouch で作って、ls とtree でちゃんと作成できたかチェックしています。
seq は連番を作るコマンドですから、ファイル名も数字だけです。
拡張子もなく数字だけのファイル名なんて、ちょっと違和感あるかも知れませんが、カレントディレクトリにできた20個はみんなレギュラーファイルです。
lesson 8 でやったls -l でチェックしてみてください。
seq の引数を100にすれば100個のファイルが一瞬で作成できます。スゴイと思いません??(笑)
for ループでファイルに書き込み
さて、photo.2 の結果をみて、ちょっと何か思いつきませんでしたか??
ls はカレントディレクトリをリストアップするコマンドですから、for ループのリストに利用できそうな?気がしませんか?
早速、できるかどうか?試してみましょう!
さっきはtouch で空のファイルを20個作りましたから、今度はその20個のファイルに何か書き込んでみましょう。
これまでのレッスンに出てきたコマンドだけでやれますよ!
どうすればできるか考えてみてください。
ヒントはlesson 10 にあります。
さて、考えはまとまりましたか?
ターミナルに入力して、1〜20のファイルに、”こんばんは!” と書き込んでみます。
20個のファイルへ一気に書き込む
for item in $(ls)
do
echo "こんばんは!" > $item
done
ちゃんと書き込めたかチェックしてみましょう。
cat でやります。渡す引数はいくつでもいいですよ。
for ループは繰り返し処理ですから、全部同じ内容が書き込まれているハズです。

とりあえずランダムにファイルを選んで、cat 1、cat 1 17 でチェックしてみました。
for ループの威力。わかってもらえました??(笑)。
作業ディレクトリに、20個の”こんばんわ!”って書かれたファイルが一瞬でできました。
でも、同じ内容のファイルが20もあって、なんだかムダな感じもしますよね?
これまでは、作業ディレクトリの中をにぎやかにしようと、mkdir やtouch を使っていろいろファイルを生成してきました。
今回はさらにループ処理で複数のファイルを一気に作成してみました。
次回は、ファイルの削除を勉強しましょう。
それと、今回、ループ処理で作ったファイルの名前。今はseq の連番をそのまま使っていて、ちょっとファイル名としてはイマイチです。
ファイル名の変更は、lesson 5 でやりました。覚えていますか?
次回は、ファイルのリネームもループ処理でやってみましょう。