このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

Linuxコマンドの基本:シェルスクリプトの制御構造:if文

シェルスクリプトの制御構造:if文

 シェルスクリプトでは、他のプログラミング言語と同様に、条件による分岐や繰り返し処理を行うことができます。これらは制御構造と呼ばれ、プログラムにおいて非常に重要な機能です。

 制御構造を利用するためには、複合コマンドを使用します。ここでは、よく使われる複合コマンドの一つであるif文について詳しく解説します。

if文の基本構造

 if 文は、条件を評価し、その結果に応じて処理を分岐させるための構造です。シェルスクリプトでの if 文の基本的な構造は次のとおりです。

【構文】

if 条件コマンド; then
    条件が真のときに実行するコマンド
elif 他の条件コマンド; then
    他の条件が真のときに実行するコマンド
else
    全ての条件が偽のときに実行するコマンド
fi
  • if の後にはコマンドを置きます。
  • then の前にはセミコロン ; が必要です(改行する場合はセミコロンを省略できます)。
  • elifelse は必要に応じて追加できます。
  • 最後に fiif 文を閉じます。

実際の例:if-ok.sh の作成

ステップ1:スクリプトの作成

user01@ubuntu:~$ nano if-ok.sh

if-ok.sh の内容

#!/bin/bash

if [ "$1" = "ok" ]; then
    echo "OK"
else
    echo "NG"
fi

解説

  • #!/bin/bash:スクリプトが Bash シェルで実行されることを指定するシェバン行です。
  • if [ "$1" = "ok" ]; then:コマンドライン引数 $1 が文字列 "ok" と等しいかを判定します。
  • [ ]:実は単なるカッコではなく、Bash の組み込みコマンドです。
  • echo "OK":条件が真の場合に "OK" と表示します。
  • else:条件が偽の場合の処理を指定します。
  • echo "NG":条件が偽の場合に "NG" と表示します。
  • fiif 文の終了を示します。

ステップ2:実行権限の付与

user01@ubuntu:~$ chmod +x if-ok.sh

ステップ3:スクリプトの実行

user01@ubuntu:~$ ./if-ok.sh ok
OK
user01@ubuntu:~$ ./if-ok.sh Ubuntu
NG

解説

  • $ ./if-ok.sh ok:引数に "ok" を与えてスクリプトを実行しています。条件が真となり、"OK" が表示されます。
  • $ ./if-ok.sh Ubuntu:引数に "Ubuntu" を与えてスクリプトを実行しています。条件が偽となり、"NG" が表示されます。

if文の記述上の注意点

セミコロンの省略

 if 文を書く際、条件の後のセミコロン ; を省略することはできません。ただし、then を次の行に改行して書く場合はセミコロンを省略できます。

エラーとなる例

if [ "$1" = "ok" ] then
    # 処理
fi

正しい記述

if [ "$1" = "ok" ]; then
    # 処理
fi

または、改行して書く場合

if [ "$1" = "ok" ]
then
    # 処理
fi

スペースの重要性

 [ ] の前後、および内部の演算子の前後にはスペースが必要です。スペースがないとエラーになります。

エラーとなる例

if ["$1" = "ok"]; then
    # スペースがないためエラー
fi

正しい記述

if [ "$1" = "ok" ]; then
    # スペースが適切に入っている
fi

if の後ろにはコマンドを置く

 シェルスクリプトの if 文では、if の後に条件式ではなくコマンドを置きます。コマンドの終了ステータス(0 が真、0 以外が偽)によって条件が判定されます。

【構文】

if コマンド; then
# コマンドの終了ステータスが真(0)の場合の処理
fi

[ ] は組み込みコマンド

[ ] は単なるカッコではなく、実際には test コマンドの別名であり、シェルの組み込みコマンドです。

確認

user01@ubuntu:~$ type [
[ はシェルの組み込み関数です

[ ] コマンの例

[ "$1" = "ok" ]
  • これは test "$1" = "ok" と同じ意味です。
  • このコマンドは、引数 $1"ok" と等しいかを評価し、真なら終了ステータス 0、偽なら終了ステータス 1 を返します。

コマンドと引数の構造

先ほどの if 文の条件部分をコマンドと引数に分解すると以下のようになります。

if [ "$1" = "ok" ]; then

  • コマンド[
  • 引数1"$1"
  • 引数2=
  • 引数3"ok"
  • 引数4]

注意点

  • コマンド [ ] の内部はスペースで区切る必要があります。
  • ][ コマンドの終了を示す引数であり、コマンドの一部です。

不要となったファイルの削除

user01@ubuntu:~$ rm if-ok.sh 

まとめ

  • ifはコマンドの終了ステータスによって条件分岐を行います。
  • 基本構造
if コマンド; then
    # 真の場合の処理
elif 他のコマンド; then
    # 他の条件が真の場合の処理
else
    # 全ての条件が偽の場合の処理
fi
  • [ ] はシェルの組み込みコマンドであり、条件評価に使用します。
  • 記述時の注意点
    ・条件部分の前後や演算子の前後にはスペースが必要。
    then の前にはセミコロンが必要(改行する場合を除く)。
  • コマンドライン引数を使って条件を判定することで、スクリプトの柔軟性が向上します。

これらのポイントを押さえて、シェルスクリプトでの条件分岐を効果的に活用しましょう。