【Linux】シェルスクリプトでif文を使うには?記述上の注意点も紹介

Linux_if文 オペレーティングシステム

シェルスクリプトも通常のプログラミング言語と同じように条件分岐を書けます.
ただいくつか記述上のルールもあるので注意が必要です.

今回はBashを使いシェルスクリプトでif文を書く方法について紹介します.

if文の基本構造

シェルスクリプトではif文を次のように書きます.

if <コマンド1>; then
  <コマンド1>の結果が真のときの処理
elif <コマンド2>; then
  <コマンド2>の結果が真のときの処理
else
  上記の結果がすべて偽であるときの処理
fi

プログラミング言語と似た書き方なので読みやすいですね.
またelse句やelif句が省略可能な点もプログラミング言語との共通点でしょう.

サンプルコード

基本構造を例にコードを書きました.

if [ "$1" = "Monday" ]; then
    echo "胸トレ"
elif [ "$1" = "Tuesday" ]; then
    echo "脚トレ"
else
    echo "おやすみ"
fi

$1にはコマンドラインから引数が入ります.
この引数が Monday であれば「胸トレ」と表示し,Tuesday であれば「脚トレ」,それ以外の時は「おやすみ」と表示します.

1番初めの条件式がTREUのとき|クリックして拡大できます

引数が Monday なのでちゃんと「胸トレ」が表示されていますね!

このように変数の値によって表示する文字を変更できます.

if文を書くときの注意点

if文を使うにはいくつかルールがあります.
コマンドが実行できないこともあるので注意しましょう.

基本的に ; は省略できない

条件式の後の;は基本的に省略できません.

;は省略できない|クリックして拡大できます

どうしても;を書きたくないときは;の代わりに改行を入れましょう.

改行を入れると実行できる|クリックして拡大できます

[] の前後のスペースは消せない

[]に関連するエラーケースを2つ紹介します.

①[]の中にある文字列の最初と最後のスペースを削除するとエラー

[]の前後のスペースは削除できない|クリックして拡大できます

if文に誤りがあってもスクリプトは実行されるようです.

②if文と[]の間のスペースを削除するとエラー

if文と[]の間にスペースは入れられない|クリックして拡大できます

今回のケースでは if が認識されていないためスクリプトが実行できていませんね.

[] は省略できない

[] はプログラミング言語でいう()に似ていますね.
言語によっては()は省略できましたが,シェルスクリプトでは [] を省略できません

[]は省略できない|クリックして拡大できます

また [ はbashで用意された組み込みコマンドです.

[ は条件式と ] の引数を取る意味がありました.

[ は組み込み関数|クリックして拡大できます

fi や then は省略できない

if文の最後には必ずfiが必要です.

fiは省略できない|クリックして拡大できます

また条件式の後のthenも忘れてはいけません.

thenも省略できない|クリックして拡大できます

まとめ

今回はシェルスクリプトでif文を書く方法を紹介しました.

if文を書くときは細かいルールがありました.

  1. ;は省略できない(もしどうしても省略したいときは;の代わりに改行する)
  2. [] の前後のスペースは消してはいけない
  3. [] は省略できない
  4. fi や then も省略できない

書き方によってはスクリプトが実行できないので注意が必要ですね.
基本構文を守り,あまり省略して書かないことをおすすめします.