Linux If文 条件分岐を行う(シェルスクリプト)

LinuxのシェルスクリプトのIf文で条件分岐を行うサンプルです。

目次

if文 if文とは
  if文のサンプル
  ネスト構造 if文の中にif文
  数値の比較演算子
論理演算子 論理積(&&) AかつB
  論理和(||) AまたはB
  論理否定(!) Aではない
case文 caseで条件分岐を行う
case文で前方一致を使用して比較する(部分一致/後方一致も可)

if文とは

if [ 条件式 ]; then
   処理
fi
// elifとelseを書く場合
if [ 条件式 ]; then
   処理1
elif [ 条件式 ]; then
   処理2
else
   処理3
fi
  • 条件が合致する場合、配下のブロックの処理が実行され、if文の処理は終了します。
  • 条件が合致することをtrue(真)ともいいます。
  • 条件が合致しないことをfalse(偽)ともいいます。
  • 条件が合致しない場合、配下のブロックの処理は実行されず、その下(elif/else/if文終了)に進みます。
  • elifは、1つ以上記述できます。省略可能です。
  • elseのブロックの処理は、どの条件も合致しなかったときに実行されます。elseは1つのみ記述できます。省略可能です。

 

if文のサンプル

#!/bin/bash
a=1

if [ $a -eq 0 ]; then
	echo 0
elif [ $a -eq 1 ] ; then
	echo 1 # 1
else
	echo "other"
fi

4行目から10行目までがif文です。
6行目は、条件が合致する(aの値は1である)のでその配下の処理が実行されます。
7行目の処理が実行されif文を抜けます(終了します)。

 

ネスト構造 if文の中にif文

#!/bin/bash
a=1
b=1

if [ $a -eq 1 ]; then
	if [ $b -eq 1 ]; then
	echo 1 # 1
	fi
fi

6行目は、if文の中にif文を記述しています。ネストの構造です。入れ子ともいいます。

 

数値の比較演算子

数値の比較演算子は、2つの値を比べて条件を満たしていればtrue,そうでない場合はfalseを返します。

比較演算子 説明
a -eq b aとbの値は等しい
a -ne b aとbの値は等しくない
a -gt b aはbより大きい
a -ge b aはbより大きい または 等しい
a -lt b aはbより小さい
a -le b aはbより小さい または 等しい

 

論理積(&&)  AかつB

if  [左の条件式]  &&  [右の条件式]

左の式と右の式が両方ともtrueの場合、trueになります。それ以外はfalseです。

#!/bin/bash
a=6

if [ $a -eq 6 ] && [ $a -lt 10 ]; then
	echo "true" # true
fi

4行目は、左の式と右の式が共にtrueなので、trueになります。

 

論理和(||)  AまたはB

if [左の条件式] || [右の条件式]

左の式または右の式のどちらかがtrueの場合、trueになります。

#!/bin/bash
a=1

if [ $a -eq 0 ] || [ $a -lt 10 ]; then
	echo "true" # true
fi

4行目は、左の式はfalseですが右の式がtrueなのでtrueになります。

 

論理否定(!)  Aではない

if  [! 条件式]
  • 式がfalseの場合にtrueになります。
  • 式がtrueの場合にfalseになります。
#!/bin/bash
a=1

if [ ! $a -eq 2 ]; then
	echo "true" # true
fi

if [ ! $a -eq 1 ]; then
	echo "true"
else
	echo "false" # false
fi

4行目は値の比較でfalseになり、それを!で否定するのでtrueになります。
8行目は値の比較でtrueになり、それを!で否定するのでfalseになります。

case文で条件分岐を行う

case文はJavaScript等のswitch文に相当します。

#!/bin/bash
name=suzuki

case "$name" in
  tanaka) echo "hello tanaka" ;;
  suzuki) echo "hello suzuki" ;;
  sato) echo "hello sato" ;;
esac

実行すると6行目の文字列が出力されます。

 

case文で前方一致を使用して比較する(部分一致/後方一致も可)

case文では、ワイルドカードを使用して部分一致、前方一致、後方一致での比較が可能です。

#!/bin/bash
name=suzuki

case "$name" in
  tanaka) echo "hello tanaka" ;;
  suzu*) echo "hello suzuki" ;;
  sato) echo "hello sato" ;;
esac

6行目は、ワイルドカードを使用して前方一致で比較しています。
実行すると6行目の文字列が出力されます。

関連の記事

Linux for文 処理を繰り返す(シェルスクリプト)

△上に戻る