条件分岐とループの基本|シェルスクリプト入門|UNIX Cafe

当ページのリンクには広告が含まれています。
条件分岐とループの基本|シェルスクリプト入門

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

これまでの「if文」や「for文」と同じように、今回のスクリプトもファイルにして動かしてみましょう!

実行結果

$ ./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 は「続ける力」。
このふたつを覚えれば、スクリプトはぐんと頼もしくなるよ。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次