1. ホーム
  2. スクリプト・コラム
  3. リナックスシェル

Shellのif else文の具体的な使い方を解説

2022-02-07 15:54:13

他のプログラミング言語と同様に、シェルは選択構造をサポートしており、その形式としてif else文とcase in文の2つがあります。ここでは、まずif else文を取り上げ、case in文については、Shell case inで取り上げることにします。

C言語、Java、JavaScriptなど、他のプログラミング言語に既に慣れている方は、シェルのif else文に少し違和感を覚えるかもしれません。

ifステートメント

最もシンプルな使い方は、if文のみを使用することで、構文形式は次のようになります。

if condition
then
  statement(s)
fi


conditionは判定条件です。条件が成立する("true"を返す)場合は、その後に続くステートメントが実行され、条件が成立しない("false"を返す)場合は、ステートメントは何も実行されない。条件が真でない(偽)場合は、どのステートメントも実行されません。

基本的に、ifはコマンドの終了状態を検出するものであり、次のセクションの シェルの終了状態 は、次のセクションで説明します。

最後にfiで閉じなければならないことに注意してください。これはifのスペルを逆にしたものです。また、このfiで閉じているので、複数の文があっても{ }で囲む必要はありません。

お好みで、thenとifを1行に書くこともできます。

if condition; then
  statement(s)
fi


これは、if と then が同じ行にある場合に必要で、そうでない場合はシンタックスエラーになります。

例1

次の例では、if文を使用して2つの数値の大きさを比較しています。

#! /bin/bash
read a
read b
if (( $a == $b ))
then
  echo "a and b are equal"
fi


ランニングの結果
84↙
84↙
aとbは等しい

での シェル(()) (())の項では、(())が数学の計算コマンドで、最も基本的な足し算、引き算、掛け算、割り算だけでなく、より大きい、より小さい、等しいなどの関係演算や、with、or、非論理演算もできることをお話ししました。aとbが等しいとき、(( $a == $b ))は条件が成立すると判断してifに入り、その後にecho文を実行する。

例2

論理演算子は、判定条件でも使用できます。

#! /bin/bash
read age
read iq
if (( $age > 18 && $iq < 60 ))
then
  echo "You're an adult, but you're still failing at IQ! "
  echo "Come to the C language Chinese website (http://c.biancheng.net/) to learn programming, you can quickly improve your IQ. "
fi


ランニングの結果
20↙
56↙

&& は論理演算子 "with" で、 && の両辺が真の "のときだけ真になります。

他のプログラミング言語に詳しい方は、thenの後に複数の文があっても、fi closureがあるので{ }で囲む必要はないことに注意してください。

if elseステートメント

分岐が2つある場合は、if else文という形式が使えます。

if condition
then
  statement1
else
  statement2
fi


条件が成立すれば、thenの後のstatement1文が実行され、そうでなければelseの後のstatement2文が実行される。

例として

#! /bin/bash
read a
read b
if (( $a == $b ))
then
  echo "a and b are equal"
else
  echo "a and b are not equal, input error"
fi


ランニングの結果
10↙
20↙
a と b は等しくない、入力エラー

結果からわかるように、aとbは等しくなく、条件が成立しないので、else以降の文が実行されます。

if elif elseステートメント

シェルは任意の数の分岐をサポートしており、さらに分岐がある場合は、if elif elseの構成で、次のような書式で使用することができます。

if condition1
then
  statement1
elif condition2
then
  statement2
elif condition3
then
  statement3
......
else
  statementn
fi


ifもelifもthenが続かなければならないことに注意してください。

文全体の実行ロジックは

  • 条件1が真であれば、ifの後にstatement1を実行し、条件1が真でなければ、elifを続けて条件2を決定します。
  • 条件2が成立していれば文2を実行し、条件2が成立していなければelifを続けて条件3を判定します。
  • 条件3が成立していれば、ステートメント3を実行し、条件3が成立していなければ、その後に続くelifを続行する。
  • ifとelifの判定がすべて失敗したら、最後のelseに進み、statementnを実行する。

例として、年齢を入力し、対応するライフステージを出力する。

#! /bin/bash
read age
if (( $age <= 2 )); then
  echo "baby"
elif (( $age >= 3 && $age <= 8 )); then
  echo "toddler"
elif (( $age >= 9 && $age <= 17 )); then
  echo "teenager"
elif (( $age >= 18 && $age <= 25 )); then
  echo "adult"
elif (( $age >= 26 && $age <= 40 )); then
  echo "youth"
elif (( $age >= 41 && $age <= 60 )); then
  echo "middle-aged"
else
  echo "old"
fi


実行結果1。
19
成人期

実行結果 2.
100
エージング

別の例として、整数を入力し、その整数に対応する曜日の英語表記を出力する。

#! /bin/bash
printf "Input integer number: "
read num
if ((num==1)); then
  echo "Monday"
elif ((num==2)); then
  echo "Tuesday"
elif ((num==3)); then
  echo "Wednesday"
elif ((num==4)); then
  echo "Thursday"
elif ((num==5)); then
  echo "Friday"
elif ((num==6)); then
  echo "Saturday"
elif ((num==7)); then
  echo "Sunday"
else
  echo "error"
fi


実行結果1。
入力された整数の数値:4
木曜日

実行結果 2.
入力された整数の数値:9
エラー

Shellのif else文の使い方についての記事は以上です。Shell if else文の詳細については、スクリプトハウスの過去記事を検索するか、以下の記事を引き続き閲覧してください。