シェルスクリプトの条件分岐と比較演算

シェルスクリプトでは、状況に応じて処理を切り替える 条件分岐 が非常に重要です。
ここでは 数値や文字列の比較演算if文・case文 の使い方を丁寧に解説します。


目次

1. 基本の if 文

#!/bin/bash

number=10

if [ $number -gt 5 ]; then
    echo "number は 5 より大きい"
fi

出力:

number は 5 より大きい

ポイント

  • if [ 条件 ]; then … fi が基本構文
  • [ の前後にはスペースが必要
  • fi で if 文を閉じる

2. else / elif を使った分岐

#!/bin/bash

number=3

if [ $number -gt 5 ]; then
    echo "number は 5 より大きい"
elif [ $number -eq 5 ]; then
    echo "number は 5 です"
else
    echo "number は 5 より小さい"
fi

出力:

number は 5 より小さい
  • elif は「else if」の意味
  • 最後の else はそれ以外の場合の処理

3. 数値比較演算子

演算子説明
-eq等しい
-ne等しくない
-ltより小さい
-le以下
-gtより大きい
-ge以上

例:

a=10
b=7

if [ $a -ge $b ]; then
    echo "a は b 以上"
fi

4. 文字列比較演算子

演算子説明
=等しい
!=等しくない
-z文字列が空
-n文字列が空でない

例:

name="Alice"

if [ "$name" = "Alice" ]; then
    echo "こんにちは、Aliceさん!"
fi

text=""

if [ -z "$text" ]; then
    echo "text は空です"
fi

出力:

こんにちは、Aliceさん!
text は空です

5. 論理演算(AND / OR / NOT)

5-1. AND (-a)

age=25
gender="male"

if [ $age -gt 18 -a "$gender" = "male" ]; then
    echo "成人男性です"
fi

5-2. OR (-o)

day="土"

if [ "$day" = "土" -o "$day" = "日" ]; then
    echo "週末です"
fi

5-3. NOT (!)

file="/tmp/test.txt"

if [ ! -f "$file" ]; then
    echo "ファイルが存在しません"
fi

💡 ポイント

  • &&, ||[[ ]] 内で使うこともできます(bash拡張)

6. 複数条件の書き方([[ ]] 形式)

#!/bin/bash
age=20
gender="female"

if [[ $age -ge 18 && "$gender" = "female" ]]; then
    echo "成人女性です"
fi
  • [[ ]][ より柔軟で、論理演算子 && / || がそのまま使える
  • 条件のグループ化も簡単

7. ファイルテスト条件

シェルスクリプトでは、ファイルの存在や種類も条件にできます。

オプション説明
-fファイルが存在するか
-dディレクトリが存在するか
-r読み取り可能か
-w書き込み可能か
-x実行可能か

例:

file="/tmp/test.txt"

if [ -f "$file" ]; then
    echo "ファイルが存在します"
fi

if [ -d "/tmp" ]; then
    echo "/tmp はディレクトリです"
fi

8. case 文による条件分岐

複数の値を比較するときは case が便利です。

#!/bin/bash
day="土"

case "$day" in
    月|火|水|木|金)
        echo "平日です"
        ;;
    土|日)
        echo "週末です"
        ;;
    *)
        echo "不明な日です"
        ;;
esac
  • | で複数の値をまとめられる
  • * はそれ以外の条件を表す

まとめ

数値比較の基本

-eq  等しい
-ne  等しくない
-lt  より小さい
-le  以下
-gt  より大きい
-ge  以上

文字列比較の基本

=    等しい
!=   等しくない
-z   空文字列
-n   空でない

ファイルテスト

-f ファイルが存在するか
-d ディレクトリか
-r 読み取り可能か
-w 書き込み可能か
-x 実行可能か

if文の書き方

if [ 条件 ]; then
    処理
elif [ 条件 ]; then
    処理
else
    処理
fi

case文の書き方

case 変数 in
  値1) 処理 ;;
  値2) 処理 ;;
  *)    処理 ;;
esac
よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

コメント

コメントする

目次