Categories: shellscript

シェルスクリプトでOSの種類を判別・判定する方法

今回紹介するスクリプトでは、実行環境のOSを判定するシェルスクリプトを紹介します。

環境変数OSTYPEを用いたOSの判定

早速ですが、サンプルとなるスクリプトを以下に示します。

このスクリプトでは、\$OSTYPE という環境変数を使用して、実行中のOSを判定しています。case文を用いて、異なるOSに応じたメッセージを表示しています。

#!/bin/bash

# OSを判定する関数
check_os() {
    case "$OSTYPE" in
        linux-gnu*)
            echo "Linux"
            ;;
        darwin*)
            echo "macOS"
            ;;
        cygwin*|mingw32*|msys*)
            echo "Windows"
            ;;
        *)
            echo "Unknown OS: $OSTYPE"
            ;;
    esac
}

# OSの判定を実行
check_os

このスクリプトでは、\$OSTYPEという環境変数を使用して、実行中のOSを判定しています。

  • Linux: linux-gnu*で始まるOSはLinux系です。
  • macOS: darwin*で始まるOSはmacOSです。
  • Windows: cygwin*, mingw32*, msys*で始まるOSはWindows系です。
  • Unknown OS: 上記の条件に当てはまらない場合は、「Unknown OS」と表示されます。

より細かいOSの種類の判別

おわかりの通り、上記のサンプルスクリプトで判別できるのはLinux, Windows, MacOSなどの大まかな種類であり、例えばUNIXの中で使っているマシンがUbuntuであるか否かなどを知ることはできません。

より細かいOSの種類の判別を行うサンプルスクリプトを以下に示します。以下はUbuntuかCentOSかを判別するシェルスクリプトです。

#!/bin/bash

# /etc/os-releaseファイルを読み込む
if [[ -f /etc/os-release ]]; then
    . /etc/os-release

    # IDフィールドで判定
    case "$ID" in
        ubuntu)
            echo "This system is Ubuntu."
            ;;
        centos)
            echo "This system is CentOS."
            ;;
        *)
            echo "This system is neither Ubuntu nor CentOS."
            ;;
    esac
else
    echo "os-release file not found."
fi

このスクリプトでは「/etc/os-release」というファイルを確認します。私の環境では以下のような情報が記されていました。

case文を使用して、変数\$IDの値に基づいて異なる処理を実行します。$IDは、ディストリビューションの名前(例: ubuntu, centos)を示します。

まとめ

このシェルスクリプトを使うことで、異なるOS環境に対して条件分岐を行い、処理を分けることができます。例えば、特定のOS向けの設定やインストール手順を自動化する際に役立ちます。

Haruoka