指定した条件によって処理を変えることができる条件分岐(if文)の書き方について紹介していきます
if文の基本
if文の基本構文について紹介していきます。if文には複数の記述方法がありますが今回はtestコマンドを利用した記述方法を使っていきます。
前提として定型文の部分を白文字、任意の部分を黄色文字で記載していきます。
構文(パターン①)
if test 条件式;
then
処理内容
fi
条件に一致した場合のみ処理を行うif文です。
構文(パターン②)
if test 条件式;
then
処理内容①
else
処理内容②
fi
elseを追加したことで条件に一致しない場合の処理を実装したif文です。
条件に一致した場合は処理内容①を実行する。不一致の場合には処理内容②を実行する。
構文(パターン③)
if test 条件式①;
then
処理内容①
elif test 条件式②;
then
処理内容②
else
処理内容③
fi
elifを追加したことで複数の条件を指定することができます。
条件文①に一致しなければ、条件式②の判定が行われます。条件式①、②のいずれにも該当しない場合には処理内容③の全ての条件に一致しない場合の処理が行われます。
条件式の書き方(文字列 or 数値)
条件式の書き方は比較する対象が文字列か数値かで異なります。それぞれの書き方について紹介していきます。
文字列型の条件式と演算子
文字列同士を比較する条件式について説明します。
文字列を比較する際に利用できる主な演算子は以下の通りです
演算子 | 説明 |
---|---|
-n 文字列 | 文字列の長さが1文字以上ならtrue |
-z 文字列 | 文字列の長さが0であればtrue |
文字列① = 文字列② | 2つの文字列が等しければtrue |
文字列① != 文字列② | 2つの文字列が等しくなければtrue |
実際に書いてみます。
#! /bin/bash
if test $1 = 'dog';
then
echo '$1は'$1' です'
fi
exit 0
解説
条件に一致した場合のみ処理を実行する構文(パターン①)で記述しています。
条件式 ⇒ $1 = ‘dog’
第一引数の値がdogであれば処理を実行する条件式です。
処理内容 ⇒ echo ‘$1は’$1′ です’
条件に一致した場合に実行される処理です。
出力結果
条件に一致する場合
ubuntu@sample:~$ ./dog.sh dog
$1はdog です
条件に一致しているため、処理が実行されています。
条件に一致しない場合
ubuntu@sample:~$ ./dog.sh pag
ubuntu@sample:~$
条件に一致しないため、処理が行われずに終了しています。
数値型の条件式と演算子
数値同士を比較する条件式について説明します。
数値を比較する際に利用できる主な演算子は以下の通りです
演算子 | 説明 | 演算子は下記英語の略語 |
---|---|---|
数値① -eq 数値② | 数値①と数値②が等しければtrue | equal |
数値① -ge 数値② | 数値①が数値②より大きい、もしくは等しければtrue | greater than or equal |
数値① -gt 数値② | 数値①が数値②より大きければtrue | greater than |
数値① -le 数値② | 数値①が数値②より小さい、もしくは等しければtrue | less than or equal |
数値① -lt 数値② | 数値①が数値②未満であればtrue | less than |
数値① -ne 数値② | 数値①と数値②が等しくなければtrue | not equal |
実際に書いてみます。
#! /bin/bash
if test $1 -gt 10;
then
echo '$1は10より大きいです'
else
echo '$1は10より小さいです'
fi
exit 0
解説
条件に一致しない場合の処理を実装した構文(パターン②)で記述しています。
条件式 ⇒ $1 -gt 10
第一引数の値が10より大きければtrueとする条件式です
処理内容① ⇒ echo ’$1は10より大きいです’
条件に一致した場合に実行される処理です。
処理内容② ⇒ echo ‘$1は10より小さいです’
条件に一致しない場合に実行される処理です。
出力結果
条件に一致する場合
ubuntu@sample:~$ ./dog.sh 20
$1は10より大きいです
条件に一致しているため、処理内容①が実行されています。
条件に一致しない場合
ubuntu@sample:~$ ./dog.sh 1
$1は10より小さいです
条件に一致しないため、処理内容②が実行されています。