本記事の構成および論理分析にはAI(人工知能)を使用しています。情報の正確性は、システム管理者(UNIXユーザー)による手動検証済みです。
第8回 条件で処理を分けよう:if・then・else・fiの基本 | はじめてのシェルスクリプト

はじめに
この連載では、macOS のターミナルで sh を使いながら、シェルスクリプトの基本を順番に学んでいきます。前回(第7回)では、read コマンドを使って、スクリプトの実行中にキーボードからの入力を受け取る方法を学びました。read を使うことで、ユーザーが入力した値を変数に入れ、スクリプトの中で活用できることを確認しましたね。
さて、read で受け取った入力は、そのまま表示したり、別の処理に渡したりすることができました。しかし実際の場面では、「入力された値によって、次に何をするかを変えたい」という場面が出てきます。たとえば、名前が一致したときだけ特定のメッセージを表示したり、答えが yes なら処理を進め、no なら止めたりといった具合です。
第8回では、そのような場面で使う if 文を学びます。if 文を使うと、条件が成り立つかどうかによって実行する処理を分けることができます。then・else・fi の役割を確認しながら、条件によって動きが変わるスクリプトの基本を身につけていきましょう。
この回で学ぶこと
if文とは何かthenelsefiの役割- 条件によって処理が分かれる流れ
- 文字列比較を使った簡単な条件分岐
- 入力値や変数と組み合わせる方法
- 真のときと偽のときの実行結果
- 初学者がつまずきやすい書き方
if 文とは何か
条件によって処理を分ける
if 文は、条件が成り立つときと成り立たないときで、実行する処理を分けるための構文です。
たとえば、「入力された名前が Taro なら特定のメッセージを表示する」といった処理を書けます。
基本の形
if 文の基本形は次のようになります。
if [ "$name" = "Taro" ]; then
echo "Matched"
else
echo "Not matched"
fiif で条件を書き、条件が成り立つときは then の後ろを実行します。
条件が成り立たないときは else の後ろを実行します。
最後は fi で閉じます。
サンプルコード
if_sample.sh に次の内容を保存します。
#!/bin/sh
echo "Please enter your name:"
read name
if [ "$name" = "Taro" ]; then
echo "Hello, Taro"
else
echo "You are not Taro"
fi実行手順
1. ファイルを作成して保存する
エディタで if_sample.sh という名前のファイルを作成し、次の内容を保存します。
#!/bin/sh
echo "Please enter your name:"
read name
if [ "$name" = "Taro" ]; then
echo "Hello, Taro"
else
echo "You are not Taro"
fi2. Taro と入力して実行する
次のコマンドを実行します。
sh if_sample.shまず次のように表示されます。
Please enter your name:ここで Taro と入力して Enter キーを押します。
実行結果は次のようになります。
Hello, Taro3. Hanako と入力して実行する
もう一度実行して、今度は Hanako と入力します。
実行結果は次のようになります。
You are not Taroコードの読み方
read name
この行で、キーボードから入力された値を name に入れています。
[ “$name” = “Taro” ]
この部分で、name に入っている値が Taro と同じかどうかを確認しています。
同じなら条件は真になります。
違えば偽になります。
then
条件が真のときに実行する処理をここから書きます。
else
条件が偽のときに実行する処理をここから書きます。
fi
if 文の終わりを表します。
条件によって結果が変わる
if 文の重要な点は、同じスクリプトでも入力内容によって結果が変わることです。
今回の例では、Taro と入力したときだけ Hello, Taro が表示されます。
それ以外の入力では、You are not Taro が表示されます。
初学者がつまずきやすい点
fi を書き忘れる
if 文は、最後に fi が必要です。
これがないと、構文が正しく終わりません。
= の前後や [ ] の周りの空白を崩す
条件式では、[ "$name" = "Taro" ] のように空白を正しく入れる必要があります。
空白が崩れると、意図した通りに動かないことがあります。
文字列をクォートしない
"$name" のようにクォートを付けておくと、空入力や空白を含む入力でも扱いやすくなります。
よくあるエラー
parse error
fi の書き忘れや、then の位置が正しくない可能性があります。
if then else fi の形をもう一度確認してください。
条件が思った通りに分岐しない
比較している値を確認してください。
[ "$name" = "Taro" ]では、完全に同じ文字列のときだけ真になります。
入力したのに else 側になる
大文字小文字や空白が違っている可能性があります。
たとえば taro と Taro は同じではありません。
練習用コード
次の内容で answer_check.sh を作成して実行してみてください。
#!/bin/sh
echo "Type yes or no:"
read answer
if [ "$answer" = "yes" ]; then
echo "You typed yes"
else
echo "You did not type yes"
fiyes を入力した場合と、no を入力した場合で、表示結果の違いを確認してください。
この回で理解しておくこと
if文は条件によって処理を分けるために使うthenは真のとき、elseは偽のときの処理を書くfiはif文の終わりを表す[ "$name" = "Taro" ]のように文字列比較ができる- 入力値や変数と組み合わせると動的な分岐ができる
- 条件式の空白やクォートは正確に書く必要がある
まとめ
今回は、if 文を使って条件によって処理を分ける基本を確認しました。
シェルスクリプトでは、入力値や条件に応じて処理を変える場面が多いため、if 文は重要な基本です。
次回は、条件式と test コマンドをもう少し詳しく学びます。
次回予告
次回は「条件式と test コマンドを理解しよう」です。
[ ] や test を使って、真と偽をどのように判定するかを確認します。







