AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / ubuntu / 问题 / 1162491
Accepted
a.mosallaei
a.mosallaei
Asked: 2019-08-01 11:43:09 +0800 CST2019-08-01 11:43:09 +0800 CST 2019-08-01 11:43:09 +0800 CST

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

  • 772

所以我正在尝试创建一个 bash/可执行文件,并且我需要知道系统上 Ubuntu 的版本号。我在网上找到的所有方法都包括lsb_release -r,但是我无法将其输出到变量中。

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

scripts command-line bash
  • 5 5 个回答
  • 9173 Views

5 个回答

  • Voted
  1. Best Answer
    WinEunuuchs2Unix
    2019-08-01T11:47:55+08:002019-08-01T11:47:55+08:00
    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
    
    • 26
  2. terdon
    2019-08-02T00:43:35+08:002019-08-02T00:43:35+08:00

    另一种方法是改用该/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
    

    为避免不必要地设置所有这些变量,您可以在子shell中获取文件,回显您需要的变量并退出子shell:

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

    或者,您总是可以直接解析文件:

    $ grep -oP 'VERSION_ID="\K[\d.]+' /etc/os-release 
    18.04
    
    • 12
  3. Eliah Kagan
    2019-08-02T01:57:59+08:002019-08-02T01:57:59+08:00

    该lsb_release命令支持-s(或--short)选项来仅打印您要求的信息,而不是说明信息类型的标题。

    要仅获取版本号,运行以下命令就足够了:

    lsb_release -sr
    

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

    18.04
    

    与WinEunuuchs2Unix 的 answer中的方法一样,使用命令替换将此输出分配给 shell 变量仍然是合理的。假设您希望ver变量保存版本号:

    ver="$(lsb_release -sr)"
    

    有了-s,就不需要用cut, sed, grep, awk, 更复杂的参数扩展形式等来解析数字。

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

    • 10
  4. Kulfy
    2019-08-02T01:57:45+08:002019-08-02T01:57:45+08:00

    简短而简单的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
    
    • 7
  5. mlaccetti
    2020-09-16T15:57:57+08:002020-09-16T15:57:57+08:00

    缩短WinEunuuchs2Unix 答案:

    distro=$(lsb_release -i |cut -f2)
    echo "${distro,,}"
    
    os_version=$(lsb_release -r |cut -f2)
    echo "${os_version}"
    

    在 Ubuntu 20.04 上,显示如下:

    ubuntu
    20.04
    
    • 1

相关问题

  • 如何从命令行仅安装安全更新?关于如何管理更新的一些提示

  • 如何从命令行刻录双层 dvd iso

  • 如何从命令行判断机器是否需要重新启动?

  • 文件权限如何工作?文件权限用户和组

  • 如何在 Vim 中启用全彩支持?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何运行 .sh 脚本?

    • 16 个回答
  • Marko Smith

    如何安装 .tar.gz(或 .tar.bz2)文件?

    • 14 个回答
  • Marko Smith

    如何列出所有已安装的软件包

    • 24 个回答
  • Marko Smith

    无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗?

    • 25 个回答
  • Martin Hope
    Flimm 如何在没有 sudo 的情况下使用 docker? 2014-06-07 00:17:43 +0800 CST
  • Martin Hope
    Ivan 如何列出所有已安装的软件包 2010-12-17 18:08:49 +0800 CST
  • Martin Hope
    La Ode Adam Saputra 无法锁定管理目录 (/var/lib/dpkg/) 是另一个进程在使用它吗? 2010-11-30 18:12:48 +0800 CST
  • Martin Hope
    David Barry 如何从命令行确定目录(文件夹)的总大小? 2010-08-06 10:20:23 +0800 CST
  • Martin Hope
    jfoucher “以下软件包已被保留:”为什么以及如何解决? 2010-08-01 13:59:22 +0800 CST
  • Martin Hope
    David Ashford 如何删除 PPA? 2010-07-30 01:09:42 +0800 CST

热门标签

10.10 10.04 gnome networking server command-line package-management software-recommendation sound xorg

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve