Caution
お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。
if / elif / else
『if』文はコマンドの終了ステータスを評価して処理を分岐します。条件式には『[ ]』『[[ ]]』のほか、通常のコマンドも使えます。『elif』で多段分岐、『else』でそれ以外の処理を書きます。
構文
# 基本構文
if コマンドまたは条件式; then
処理
elif コマンドまたは条件式; then
処理
else
処理
fi
# [ ] を使う場合(test コマンドと同等)
if [ 条件 ]; then
# [[ ]] を使う場合(Bash拡張・推奨)
if [[ 条件 ]]; then
# 論理演算子
if [ 条件1 ] && [ 条件2 ]; then
if [[ 条件1 && 条件2 ]]; then
よく使う条件式一覧
| 条件式 | 概要 |
|---|---|
| [ -e ファイル ] | ファイルまたはディレクトリが存在するなら真です。 |
| [ -f ファイル ] | 通常ファイルが存在するなら真です。 |
| [ -d ディレクトリ ] | ディレクトリが存在するなら真です。 |
| [ -z "$var" ] | 変数が空文字列なら真です。 |
| [ -n "$var" ] | 変数が空でないなら真です。 |
| [ "$a" = "$b" ] | 文字列が等しいなら真です(== も可)。 |
| [ "$a" != "$b" ] | 文字列が異なるなら真です。 |
| [ $a -eq $b ] | 整数が等しいなら真です。 |
| [ $a -ne $b ] | 整数が異なるなら真です。 |
| [ $a -lt $b ] | a が b より小さいなら真です。 |
| [ $a -gt $b ] | a が b より大きいなら真です。 |
| [[ $str =~ 正規表現 ]] | 文字列が正規表現にマッチするなら真です([[ ]] のみ)。 |
サンプルコード
ファイルの存在を『-f』で確認し、結果に応じてメッセージを出力します。
#!/bin/bash
file="config.json"
if [ -f "$file" ]; then
echo "$file が見つかりました"
else
echo "$file が見つかりません"
fi
config.json が見つかりません
数値の比較で多段分岐します。『-ge』は「以上」を意味します。
score=85
if [ $score -ge 90 ]; then
echo "A(優)"
elif [ $score -ge 80 ]; then
echo "B(良)"
elif [ $score -ge 70 ]; then
echo "C(可)"
else
echo "D(不可)"
fi
B(良)
文字列の比較には『[[ ]]』を使います。変数のクォート忘れにも安全です。
env="production"
if [[ "$env" = "production" ]]; then
echo "本番環境です"
fi
本番環境です
『[[ ]]』内では『&&』『||』で論理演算ができます。
age=25
if [[ $age -ge 18 && $age -lt 65 ]]; then
echo "成人・現役世代です"
fi
成人・現役世代です
『[[ ]]』の『=~』演算子で正規表現マッチができます。
email="user@example.com"
if [[ "$email" =~ ^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$ ]]; then
echo "有効なメールアドレスです"
fi
有効なメールアドレスです
コマンドの終了ステータスを直接条件にできます。『grep -q』は一致すればステータス0(真)を返します。
# app.log にエラーが含まれるかチェック
if grep -q "ERROR" app.log; then
echo "エラーが見つかりました"
fi
概要
『[ ]』と『[[ ]]』の違いは重要です。[ ] はPOSIX準拠の test コマンドと同等で、変数のクォートを忘れると単語分割が起きてエラーになることがあります。[[ ]] はBash拡張で、正規表現マッチ(=~)・パターンマッチ・論理演算子の && || が使え、変数のクォートがなくても安全です。現代のBashスクリプトでは [[ ]] を推奨します。
条件式の詳細な演算子一覧は test / [ ] / [[ ]] を参照してください。多値分岐には case が便利です。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。