システム上のUbuntuのバージョンを.sh(bash)スクリプトでどのように確認できますか?


9

だから私はbash /実行可能ファイルを作成しようとしています、そしてそれはシステム上のUbuntuのバージョン番号を知る必要があります。オンラインで見つけた方法はすべてで構成されていますがlsb_release -r、これを変数に出力することはできません。

Ubuntuの現在のバージョンを取得してシェル実行可能ファイルの変数として保存する方法はありますか?


はい、ありがたいです。申し訳ありませんが、これに関するドキュメントがあることに気づきませんでした。とにかく感謝します
a.mosallaei

はい、私はそれをしました。ありがとう
a.mosallaei

回答:


21
Var=$(lsb_release -r)
echo "$Var"

トリックを行う必要があります。

数値部分の場合、これを追加するだけです。

NumOnly=$(cut -f2 <<< "$Var")
echo "$NumOnly"

lsb-release変数ファイル

/usr/bin/lsb_releasePythonスクリプトです。これは、Python言語の入門として役立つ短いスクリプトです。他の人が述べたように、バージョン番号のみを取得するより短い方法はを使用することlsb_release -srです。

この/etc/lsb-releaseファイルは、lsb_release -aコマンドによって提供される同じ情報で環境変数を定義します。

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.6 LTS"

これらの環境変数は、を使用していつでも含めることができます. /etc/lsb-release。端末でテストするには:

$ . /etc/lsb-release

$ echo $DISTRIB_RELEASE
16.04

$ echo $DISTRIB_DESCRIPTION
Ubuntu 16.04.6 LTS

はい、ありがとうございますRelease: 18.04。動作します。出力します。しかし、数を取得する方法はありますか?スクリプトのif / else関数でこの変数を使用できるようにしたいと思います。if / elseの目的は、ubuntuのディストリビューション用に私のアプリケーションの正しいバージョンをダウンロードすることです。
a.mosallaei

気にしないで。@ user68186は私の問題を解決しました。本当にありがとうございました!
a.mosallaei

答えを書くつもりでしたが、あなたは私を倒しました!:-)私は貢献してうれしいです。
user68186

4
@ a.mosallaeiの注意-数値部分だけを使用し、その他すべてを無視している場合、このスクリプトは、Ubuntu以外のマシン(Ubuntuと互換性のある多くのUbuntuベースのディストリビューションを含む)で奇妙な結果になります。しかし、独自の名前とバージョンを持っています); 数値を使用する前に、lsb_releaseの結果が「Ubuntu」で始まるかどうかを確認する必要がある場合があります。
Peteris

1
@ a.mosallaeiあなたは、実行ファイルはUbuntuコンピュータでのみ使用されると言っています。どうやってわかったの?ディストリビューションがUbuntuでない場合に終了するフェイルセーフを用意することをお勧めします。私を信じて、ユーザーはあなたのプログラムをクラッシュさせようとします。
KryštofPíštěk

11

/etc/os-release代わりに、ファイルを使用することもできます。これはシェル変数のリストとしてフォーマットされます:

$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="18.04.2 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.2 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

したがって、sourceファイルを解析する簡単な方法は、単にファイルを使用することです。

$ . /etc/os-release

$ echo $NAME
Ubuntu

$ echo $VERSION
18.04.2 LTS (Bionic Beaver)

$ echo $PRETTY_NAME
Ubuntu 18.04.2 LTS


$ echo $VERSION_ID
18.04

これらすべての変数を不必要に設定しないようにするには、サブシェルでファイルを取得し、必要な変数をエコーし​​て、サブシェルを終了します。

$ ( . /etc/os-release ; echo $VERSION_ID)
18.04

または、常にファイルを直接解析することもできます。

$ grep -oP 'VERSION_ID="\K[\d.]+' /etc/os-release 
18.04

1
Ubuntuデリバティブの場合、バージョン情報はダウンストリームバージョンを参照する場合があることに注意してください(たとえば、私のMintボックスにはVERSION_ID = "18.3"とVERSION_CODENAME = "sylvia"があります)。ただし、UBUNTU_CODENAMEは正しいはずです。
Roger Lipscombe

サブシェルはこれを行うための最も堅牢な方法ですよね?
JamesTheAwesomeDude

@JamesTheAwesomeDudeおそらくそうです。
terdon

8

lsb_releaseコマンドはサポートしています-s(または--short種類の情報であるものを言うだけで、あなたが求める情報ではなく、ヘッダを印刷する)オプションを選択します。

したがって、バージョン番号のみを取得するには、次を実行するだけで十分です。

lsb_release -sr

たとえば、Ubuntu 18.04 LTSでは、次のように出力されます。

18.04

WinEunuuchs2Unixのanswerのメソッドと同様に、この出力をシェル変数に割り当てるためにコマンド置換を使用することは依然として妥当です。ver変数にリリース番号を保持したいとします。

ver="$(lsb_release -sr)"

では-s、との数を解析する必要はありませんcutsedgrepawk、のより複雑なフォームパラメータ展開、などが。

この使用法では、" "引用符はオプションですが、そうでない理由がある場合を除いて、パラメーター展開やその他のシェル展開を引用することをお勧めします


はい、ありがとうございます!私は-sを理解していませんが、あなたはそれを完全に説明しました!感謝
a.mosallaei

5

短くてシンプルなlsb_releaseコマンド。

  • バージョンのみを印刷するには

    lsb_release -sr

    出力:

    18.04
  • 説明を印刷するには

    lsb_release -sd

    出力:

    Ubuntu 18.04.2 LTS

ここで使用されるフラグについて:

-s   show requested information in short format
-r   show release number of this distribution
-d   show description of this distribution
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.