以下の内容はhttps://pslabo.hatenablog.com/entry/2020/08/14/102130より取得しました。


Linuxのディストリシューションを検出して処理を分岐する

Linuxディストリビューションを判定し、環境の違いをカバーするように実装する必要が出たので、検出方法を考えてみました。

/etc/ のファイルで検出する方法

多くのLinuxディストリビューションでは /etc/redhat-release にディストリビューション名が含まれているので、その部分だけを抜き出してみることにします。RHELの場合は実ファイルが存在しています。しかしCentOSなどの場合はcentos-relelease などへのシンボリックリンクが設定されているので、この違いによりRHELかどうかを判断できます。シンボリックリンクの場合はリンク先を readlink で確認できます。 いずれにせよ、*-release という名前が用いられていますので、-release の部分を削ることでディストリビューションを特定できます。

なおdebian, ubuntu の場合はファイル名が微妙に異なるので、これだけは別の方法で対応します。

これを次のように実装すれば、どのようなディストリビューションであっても名前は取得できます。

#!/bin/bash

# macOS などの Linux ではない環境については uname -s の結果を用いる
distro=$( uname -s )

if [ -e /etc/debian_version ] || [ -e /etc/debian_release ]; then
    if [ -e /etc/lsb-release ]; then
        distro=ubuntu
    else
        distro=debian
    fi
else
    if [ -L /etc/redhat-release ]; then
        # /etc/redhat-release がシンボリックリンクの場合は
        # readlink でリンク先ファイル名を取得
        cd /etc
        releasefile=$( cd /etc ; readlink redhat-release )
        distro=${releasefile%*-release}
    elif [ -e /etc/redhat-release ]; then
        # /etc/redhat-release がリンクではない場合は
        # RHEL とみなす
        distro=redhat
    fi
fi

echo $distro

あとは、判定したディストリビューションごとの分岐を実装すればOKです。

apt or yum コマンドの有無を判定する

判定の目的が apt or yum のコマンドによるパッケージインストールを行うことにあるなら、つぎのように apt の有無で処理を分岐できます。

which apt 2> /dev/null

if [ $? -eq 0 ]; then
        sudo apt -y update
        sudo apt -y upgrade
        sudo apt -y autoremove
        sudo apt -y install build-essential unzip jq
else
        sudo yum -y update
        sudo yum -y upgrade
        sudo yum -y groupinstall "Development Tools"
        sudo yum -y install unzip jq
fi



以上の内容はhttps://pslabo.hatenablog.com/entry/2020/08/14/102130より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14