
UNIX Cafe | 第11回
はじめに|スクリプトに“考える力”を
ミナちゃんユニ先生、スクリプトって、いつも同じ順番で動くだけなんですか?
「もし○○だったら〜する」っていうふうに動かせたらいいのになぁ。



いいところに気づいたね。
それができるのが “if文” なんだよ。
条件を決めておくと、スクリプトがちゃんと考えて行動してくれるんだ。
if文|「もし〜なら」



えっ、スクリプトが考えて行動するなんて、なんだかかっこいいです!
たとえばどんなときに使うんですか?



たとえば。
「もしログファイルがあったら表示して、なければ新しく作る」
そんな判断ができるんだ。
基本の形:
bash
$ if [ 条件式 ]; then
コマンド
else
別のコマンド
fi例:ログファイルがあるか調べる
スクリプトファイルを作成する
bash
$ nano check_log.shファイルの中に書く内容
#!/bin/bash
if [ -f cafe.log ]; then
echo "ログが見つかりました!"
else
echo "ログはまだありません。"
fi-f 「通常のファイルであるか?」を調べるオプション。 [ -f file.txt ]
実行権限をつける
bash
$ chmod +x check_log.sh実行する
bash
$ ./check_log.sh
実行結果の例
もし cafe.log というファイルが存在する場合:
bash
$ ログが見つかりました!ファイルがまだない場合:
bash
$ ログはまだありません。



わぁ〜、ほんとに“もし〜なら”って動いてる!
スクリプトが自分で状況を見て判断してるみたいです。



そうだね。
条件分岐は、カフェで言えば「もしお客さんが来たらコーヒーを淹れる」っていう感じなんだ。
for文|“くり返しの魔法”



ユニ先生、この前は「もし〜なら」っていうif文を習いましたけど、
同じ作業を何度もやりたいときは、どうしたらいいんですか?



いい質問だね。
そんなときに使うのが “for文” なんだ。
ひとつの作業を何度もくり返したいときに、とても便利なんだよ。
基本の形
bash
$ for item in 1 2 3
do
echo "カフェの番号:$item"
done実行結果
bash
$ for item in 1 2 3
do
echo "カフェの番号:$item"
done
カフェの番号:1
カフェの番号:2
カフェの番号:3例:ファイルを順番に読み込むスクリプト
スクリプトファイルを作成する
bash
$ nano load_files.shファイルの中に書く内容
#!/bin/bash
for file in *.txt
do
echo "$file を読み込みます..."
done保存したら、実行できるように“権限”をつけよう
bash
$ chmod +x load_files.shそして、実行!
bash
$ ./load_files.sh


おぉ〜! 本当に自動で順番に動いてる!
まるで、カップを並べて順番にコーヒーを淹れてるみたいですね。



そうなんだ。
for文は、スクリプトに“リズムと繰り返し”を与える魔法なんだ。
同じことをミスなく続けられるのが、シェルのいいところだよ。
while文|条件を満たす間くり返す



ユニ先生、さっきの for文は決まった回数くり返すって言ってましたよね?じゃあ、”終わりが決まってない”ときはどうするんですか?



ふふっ、いい質問だね。
そんなときに登場するのが “while文” なんだ!
例:コーヒーを3杯淹れるスクリプト
#!/bin/bash
count=1
while [ $count -le 3 ]
do
echo "$count 杯目を淹れました!"
count=$((count + 1))
done

実行結果
$ ./coffee_counter.sh
1 杯目を淹れました!
2 杯目を淹れました!
3 杯目を淹れました!



わぁ〜、ちゃんと3杯で止まりました!
これなら“飲みすぎ注意カフェ”にもぴったりですね。



ふふっ、確かにね。while は“続ける力”のコマンドだけど、止まる条件を忘れると、ずーっとコーヒーを淹れ続けちゃうから注意だよ💦
Try it!|考えるカフェスクリプトを作ってみよう
練習1|もしログがなければ作る
#!/bin/bash
if [ ! -f cafe.log ]; then
echo "新しいログを作ります!"
touch cafe.log
fi
練習2|3回コーヒーを淹れる
#!/bin/bash
for cup in 1 2 3
do
echo "$cup 杯目のコーヒー、できました!"
done
練習3|5秒ごとに時刻を表示
#!/bin/bash
count=1
while [ $count -le 3 ]
do
date
sleep 5
count=$((count + 1))
done 


スクリプトが考えて、動いて、しかも時間まで計ってくれる…!
まるで、カフェの自動マネージャーですね。



そうなんだ。
条件分岐とループを覚えれば、
スクリプトは“ただの命令”から“相棒”に変わるんだ。
コーヒーブレイク:ユニ先生のひとこと


まとめ
- if文 :「もし〜なら」で考える
- for文 :指定回数くり返す
- fi/done :おしまいの合図
- while文 :条件を満たす間くり返す



今日は、スクリプトが「考えたり」「くり返したり」できるって知って、
なんだかちょっと感動しました。
もうただの命令じゃなくて、“会話してる”みたいです。



そうだね。
if は「もし〜なら」と考える力、for と while は「続ける力」。
このふたつを覚えれば、スクリプトはぐんと頼もしくなるよ。



