如何使用.sh(bash)脚本判断系统上Ubuntu的版本?


9

所以我试图创建一个bash / executable,它需要知道系统上Ubuntu的版本号。我在网上找到的所有方式都由组成lsb_release -r,但是我无法将其输出到变量中。

有什么方法可以获取当前版本的Ubuntu并将其另存为Shell可执行文件中的变量?


是的,我很感激。抱歉,我不知道有相关文档。无论如何我都感激不尽
a.mosallaei

是的,我已经做到了。谢谢
a.mosallaei '19

Answers:


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

应该做到的。

对于数字部分,只需添加以下内容:

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

lsb-release变量文件

/usr/bin/lsb_release是Python脚本。这是一个简短的脚本,可以很好地介绍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 '19

4
@ a.mosallaei请注意-如果您只是使用数字部分而忽略其他所有内容,则此脚本将在任何非Ubuntu机器(包括许多与Ubuntu“兼容”的基于Ubuntu的发行版)上产生奇怪的结果但有自己的名称和版本);您可能需要在使用数字之前验证lsb_release结果是否以“ Ubuntu”开头。
Peteris

1
@ a.mosallaei您说可执行文件仅在Ubuntu计算机上使用。你怎么知道?如果发行版不是Ubuntu,最好有一个故障保险退出。相信我,用户将尝试使您的程序崩溃。
克里斯托夫·皮什捷克

11

替代方法是使用/etc/os-release文件。它的格式设置为Shell变量列表:

$ 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

为了避免不必要地设置所有这些变量,可以在subshel​​l中提供文件,回显所需的变量,然后退出subshel​​l:

$ ( . /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应该正确。
罗杰·利普斯科姆

subshel​​l是执行此操作最可靠的方法,对吗?
JamesTheAwesomeDude

@JamesTheAwesomeDude可能是的。

8

lsb_release命令支持-s(或--short)选项,仅打印您要查询的信息,而不打印表明是哪种信息的标题。

仅获取版本号即可运行:

lsb_release -sr

例如,在Ubuntu 18.04 LTS上,输出:

18.04

WinEunuuchs2Unix的答案中的方法一样,使用命令替换将此输出分配给Shell变量仍然是合理的。假设您希望该ver变量保存发布号:

ver="$(lsb_release -sr)"

有了-s,没有必要解析出数以cutsedgrepawk,的更复杂的形式参数扩展,等等。

在这种用法中," "引号是可选的,但是我通常建议引号参数扩展和其他shell扩展,除非有理由不这样做。


是的,谢谢!我从不了解-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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.