お久しぶりです。KWです。
2025年1月はKWが担当させていただきます。
今回はタイトル通りシェルスクリプトの続きです。
その前にシェルスクリプトとはなんぞや?の人は
1課の技術書 シェルスクリプト編の記事を参考にしてください。
■制御構文について
前回の記事、1課の技術書 シェルスクリプト編 その2にて
コマンドが上から順番に実行されていく画面をお見せしました。
通常、シェルスクリプトは下記の画像のように上から順番にコマンドを実行していきます。

しかし条件式によって処理の処理の方法を変えることができます。
これらを制御構文と言います。
なんか難しく感じるかもしれませんが、
制御構文は通常の処理に加えて条件式と条件式に当てはまらない場合の処理を追加しただけのものです。
以下画像のように青枠が制御構文によって追加されたものです。

条件式に当てはまる場合は、
以下画像の通り青い矢印の「処理その1」→「処理その2」に進みます。

逆に条件式に当てはまらない場合は、
以下画像の通り青い矢印の「処理その3」に進みます。

イメージが出来ない?
難しいことはありません。
これは私たちの生活にもよく当てはめることも出来ます。
ラーメンが好きなKWがラーメンを例にして説明しましょう。

この通り、難しくないでしょう?
こんな感じで今回は制御構文の一つを紹介したいと思います。
■if構文について
if構文は条件式によってプログラムの処理が変わります。
手っ取り早くどんなものかお見せしましょう。
例えば以下のようなスクリプトがあるとします。
.png)
このスクリプトの①~⑧に沿って、
頑張って自分なりに丁寧に解説していきます。
①1行目にある「#!/bin/bash」について
1課の技術書 シェルスクリプト編のシェルの種類に書いてあるように
「bashというシェルを使いますよー。」という意味になります。

②4行目にある「read signal」について
1課の技術書 シェルスクリプト編 その2の変数の紹介にあるように
「signal」という箱の変数を用意したので、ログインしたあなたはこのスクリプトを実行したら「何か」を入れてくださいね。という表現になります。
入れる「何か」については次の説明になります。
③7行目にある「if [ “${signal}” = red ] ; then」について
この行を見るともはや何と書いてあるか不安になると思いますが全然焦る必要はありません。英語のif~の文法と同じ表現です。
人それぞれ解釈の方法は違いますが、個人的にはいつも以下のように脳内で解釈しています。

上記をまとめると、
「もし「signal」という箱に「red」という文字を入力すると」
という意味になります。
④8行目にある「echo ‘赤いきつねが好きなんですね’」について
echoコマンドと同じ意味で「赤いきつねが好きなんですね」という文字を表示させる意味になり、項番③と組み合わせると
「もし「signal」という箱に「red」という文字を入力すると、
「赤いきつねが好きなんですね」という文字を表示させる」になります。

はい。上記のようにスクリプトを実行させて「redを入力」→「Enter」を実行すると、「赤いきつねが好きなんですね」と出力されました。
⑤10~13行目にある「signal変数にgreenを代入する場合」について
もう項番①~④を学んだのであなたは既に出来ると思います。
意味は項番①~④と同じ意味となり、「red」→「green」に置き換わっただけの意味です。
よって意味は、
「もし「signal」という箱に「green」という文字を入力すると、
「緑のたぬきが好きなんですね」という文字を表示させる」になります。

はい。redを実行したときの例のように同様にスクリプトを実行させて今度は「greenを入力」→「Enter」を実行すると、「緑のたぬきが好きなんですね」と出力されました。
ここまでの紹介は以下の青枠のように
条件式に当てはまれば次の処理に進むよ~という意味になります。

⑥15行目にある「else」について
はい、「else」を目撃したそこのあなた!
「else」を直訳すると「それ以外」という意味になるので
以下の青枠の処理になるんだなあと思ってください。

「else」は上記のように、
「red、green以外の文字を入力すると」の意味になります。
⑦16行目にある「echo ‘どちらも好きじゃないのですね’」について
意味は上記項番④と同じ意味で「どちらも好きじゃないのですね」という文字を表示させる意味になります。よって⑦と組み合わせることで、
「redかgreen以外の文字を入力すると、
「どちらも好きじゃないのですね」という文字を表示させる」になります。

はい。この通り、「blueを入力」→「Enter」を実行すると、
「red」でも「green」でも無いと判断されて「どちらも好きじゃないのですね」と出力されました。
もちろん、他の文字でも「どちらも好きじゃないのですね」と出力されます。
⑧17行目にある「fi」について
if構文を使った場合の終了の意味になります。
■注意点
注意点について、私がスクリプト作成においてミスってしまったことを
以下にまとめました。
①条件式内の[]にはスペースを空ける
シェルスクリプト実行エラーあるあるで条件式内の[]には前後にスペースがあることを忘れないでください。

②演算子の「=」と「-eq」の違いに気を付ける
「-eq」はイコールというオプションなのですが、結論から言うと「-eq」は数値にしか使えないみたいです。
以下のように「integer expression expected」というエラーが出て実行できないので気を付けてください。

ちなみにオプションについては沢山あり一気に使うものではないので必要なものはその都度覚えると良いです。
■最後に
皆さんいかがでしたでしょうか。
今回はシェルスクリプトのif構文について紹介しました。
if構文に入り、シェルスクリプトが本格的になってきたなと思いましたが
if構文は特に現場でよく目にする機会が多いです。
自分はまだまだ現場では解読不能状態に度々陥りますが、めげずに頑張っていきたいと思います。
次回も構文シリーズ第二弾の予定です。
どうぞ乞うご期待ください。
KW
最新記事 by KW (全て見る)
- 1課の技術書 シェルスクリプト編 その5 - 2025年11月17日
- 1課の勉強会 AlmaLinux編⑨ - 2025年10月16日
- 1課の勉強会 AlmaLinux編⑧ - 2025年8月7日
- 1課の技術書 シェルスクリプト編 その4 - 2025年7月7日
- 1課の勉強会 AlmaLinux編⑦ - 2025年5月30日
