ループ(loop)してみる
Lesson 10までに学んだコマンドを駆使して、ちょっと遊んでみます。
「え?誰と?」、もちろんLinux とです(笑)
これまでみなさんはコマンドを使ってlinux と会話してきました。
「そんなつもりはない」??ですか??
でも、
コマンド(命令)を打てば、Linuxはその応えを標準出力(画面)に表示しましたよね?
命令 => 応答を繰り返してきたわけです。それを会話的、対話的、インタラクティブなんて言ったりします。
コンピュータと会話できたンだから。遊ぶことだってできるハズです。
作業ディレクトリ(first_dir)をプレイルームに見立てて、遊んでみましょう。
今、first_dir はこんな感じだと思います。

何もないディレクトリ(directory_01)に入って、とりあえず何も考えず以下のコードをターミナルに入力してください。
for ループを試してみる
for name in 1 2 3 a b c test あ
do
echo $name
done
一行入力したらEnter で改行してくださいね。
画面では以下のようになっていると思います。

これまでのコマンド入力とはちょっと違ったでしょ??(笑)
いままでの命令は、言葉少なげでしたよね?、多くてもコマンドに1つオプションを加えたようなものばかりでした。
外国語の習得と同じように、最初は覚えたての単語を単独で使う感じだったと思います。
それでも十分会話は成り立ちました。
でも、今、上で書いた命令(code)は、より会話っぽくなってきましたよね?
一行を入力してEnter を押しても、Linux はまだ何も結果を出力せず、> というプロンプトを表示して、「まだ何か言うことありますよね?」って、促してきます。
さて、最終行のdone を入力後、Enter を押したらどうなりましたか?
Linux はもうプロンプトすることなく以下のような応えを、標準出力に返してきたと思います。

何が起こったのか?
さて、一体何が起こったのでしょうか??
今あなたがターミナルに書いた命令は、for ループと呼ばれる繰り返し処理です。
echo はlesson 10 でやったばかりのコマンドです。引数に与えられた文字列をただ山びこみたいに標準出力に表示しました。
for ループは繰り返し処理ですから、echo を繰り返しているのです。
何回繰り返したか?、は、最初に書いた1行目にあるリストの回数だけ繰り返しました。
リスト??って感じですよね?(笑)
リストというのは、「1 2 3 a b c test あ」の部分のことです。
for ループの構文を下に示します。
for ループの書式
for 変数
in リスト
do
コマンド
done

変数ってなに??
今回、echo に渡された引数は$name です。これは?一体なんなのか? 気になりますよね?
上にあるfor ループの構文の中に「変数」っていう、耳慣れない単語も出てきます。
$name の正体がその「変数」なのです。
変数は文字通り、変わる数ですから、echo は$name を標準出力に吐き出しますが、$name という文字列をそのまま表示するのではなく、
$name という変数の中身を次々に表示します。
変数はデータを一時的に格納するための「箱」のようなモノなのです。
for ループはリストにあるスペースで区切られた文字列(これをアイテムと呼ぶヒトもいます)を、name という名前の変数に1つづつ繰り返し格納して、
echo の引数として繰り返し渡していきます。
そしてecho は渡された分の箱の中身だけ、エコーしているのです。
箱の中身はその都度、リストに並べた順番に変わっています。
ここでちょっと疑問に感じるヒトもいるかと思います。
1行目のname と3行目の$name は同じなの?違うの?って思うかもしれません。
Linux の変数は、入れるときは名前だけ指定して、中身を見るときは「$(ドルマーク)」を頭にくっつけます。
変数を作ってみる
それではちょっと変数っていうものを作ってみましょう。
まず、箱つまり変数の名前を決めます。上のfor ループではname という名前にしました。
今回はitem という名前にします。
ターミナルで以下のように入力してください。
変数を作る
item=1
変数に値を格納するとき、Linuxでは=を使います。わかりやすいですよね?
その際に気をつけてほしいのは、変数名と値を結ぶ=の間はピッタリとくっつけて書く。ってことです。
読みやすそうだからといってスペースで区切ってしまうと、値は箱の中に入りません。
では、箱の中身をみてみましょう。コマンドはここでもecho を使います。
中身をみる(これを参照と呼ぶヒトもいます)ときは、ドルマークを頭にくっつけますよ!
ターミナルに以下のように入力してください。
変数の中身を参照する
echo $item
変数に格納した1 が表示されましたか?
ターミナルはこうなっているハズです。

変数の名前はなんでも構いません。上のfor ループではname という名前でしたが、そこをitem にしてもOKです。
echo が標準出力に吐き出すのは変数の中身ですから、箱の名前は自由に付けて大丈夫です。
さて、ちょっと長くなってきたので、lesson 11 はこれぐらいにしておきます(笑)。
今回は、for ループを使って、遊んでみました。
Linux との会話も、コマンドのみを使った単語だけの会話のほかに、ループ処理のように構文を使った長めの会話もあります。
>というプロンプトがあることも知りました。
そして、変数についても学びました。
遊んでたわりにはいろいろ勉強できたと思います。
自作した作業ディレクトリ(first_dir) のdirectory_01/ に入ってfor ループしてみましたが、ループの中身のコマンドはecho でしたので、
ディレクトリ内にはなにも残っていません。
次回はlesson 10 で勉強したリダイレクトとfor ループを組み合わせて、再度、遊んでみることにします。