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行目の文字列が出力されます。
関連の記事