如何在简单的Shell脚本中获取发行名称和版本号?

阿里克斯·阿克塞尔(Alix Axel)

我正在研究一个简单的bash脚本,该脚本应该能够在Ubuntu和CentOS发行版上运行(对Debian和Fedora / RHEL的支持将是一个加号),并且我需要知道脚本正在运行的发行版的名称和版本(以触​​发特定操作,例如创建存储库)。到目前为止,我所得到的是:

OS=$(awk '/DISTRIB_ID=/' /etc/*-release | sed 's/DISTRIB_ID=//' | tr '[:upper:]' '[:lower:]')
ARCH=$(uname -m | sed 's/x86_//;s/i[3-6]86/32/')
VERSION=$(awk '/DISTRIB_RELEASE=/' /etc/*-release | sed 's/DISTRIB_RELEASE=//' | sed 's/[.]0/./')

if [ -z "$OS" ]; then
    OS=$(awk '{print $1}' /etc/*-release | tr '[:upper:]' '[:lower:]')
fi

if [ -z "$VERSION" ]; then
    VERSION=$(awk '{print $3}' /etc/*-release)
fi

echo $OS
echo $ARCH
echo $VERSION

似乎有效,返回ubuntucentos(我没有尝试过其他版本)作为发行名称。但是,我感觉必须找到一种更简单,更可靠的方法来找到答案-是这样吗?

它不适用于RedHat。/ etc / redhat-release包含:Redhat Linux Entreprise 5.5版

因此,版本不是第三个字,您最好使用:

OS_MAJOR_VERSION=`sed -rn 's/.*([0-9])\.[0-9].*/\1/p' /etc/redhat-release`
OS_MINOR_VERSION=`sed -rn 's/.*[0-9].([0-9]).*/\1/p' /etc/redhat-release`
echo "RedHat/CentOS $OS_MAJOR_VERSION.$OS_MINOR_VERSION"
米克尔

为了得到OSVER,最新的标准似乎是/etc/os-release在此之前,有lsb_release/etc/lsb-release在此之前,您必须为每个发行版寻找不同的文件。

这是我的建议

if [ -f /etc/os-release ]; then
    # freedesktop.org and systemd
    . /etc/os-release
    OS=$NAME
    VER=$VERSION_ID
elif type lsb_release >/dev/null 2>&1; then
    # linuxbase.org
    OS=$(lsb_release -si)
    VER=$(lsb_release -sr)
elif [ -f /etc/lsb-release ]; then
    # For some versions of Debian/Ubuntu without lsb_release command
    . /etc/lsb-release
    OS=$DISTRIB_ID
    VER=$DISTRIB_RELEASE
elif [ -f /etc/debian_version ]; then
    # Older Debian/Ubuntu/etc.
    OS=Debian
    VER=$(cat /etc/debian_version)
elif [ -f /etc/SuSe-release ]; then
    # Older SuSE/etc.
    ...
elif [ -f /etc/redhat-release ]; then
    # Older Red Hat, CentOS, etc.
    ...
else
    # Fall back to uname, e.g. "Linux <version>", also works for BSD, etc.
    OS=$(uname -s)
    VER=$(uname -r)
fi

我认为uname得到ARCH仍然是最好的方法。但是您给出的示例显然仅适用于Intel系统。我可以这样称呼它BITS

case $(uname -m) in
x86_64)
    BITS=64
    ;;
i*86)
    BITS=32
    ;;
*)
    BITS=?
    ;;
esac

或者改变ARCH是比较常见的,但明确的版本:x86x64或类似:

case $(uname -m) in
x86_64)
    ARCH=x64  # or AMD64 or Intel64 or whatever
    ;;
i*86)
    ARCH=x86  # or IA32 or Intel32 or whatever
    ;;
*)
    # leave ARCH as-is
    ;;
esac

但是,这完全取决于您。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在POM中获取Maven版本号

来自分类Dev

如何在Java中获取Tomcat版本号

来自分类Dev

如何在OS X中获取Bash版本号

来自分类Dev

如何在 Android 中获取 Jenkins 内部版本号?

来自分类Dev

如何从输出中获取版本号

来自分类Dev

如果我有基准和版本号,我如何以大写形式获取活动名称

来自分类Dev

在Bash中获取库名称和扩展名之后的版本号

来自分类Dev

如何使用shell命令仅获取PHP的版本号?

来自分类Dev

如何在xcode> = 12.3中更改版本和内部版本号

来自分类Dev

如何在工件名称中设置詹金斯内部版本号

来自分类Dev

如何解决flywaydb中脚本的版本号冲突

来自分类Dev

如何在墙纸上获取Ubuntu版本号?

来自分类Dev

如何使用SVN和Maven获取内部版本号?

来自分类Dev

用于脚本的最新 Joomla 发行版本号

来自分类Dev

如何在TfvcTemplate.12.xaml中获取内部版本号

来自分类Dev

如何在C#中获取已安装的操作系统版本号

来自分类Dev

如何在Jenkins工作流程插件中获取SVN版本号?

来自分类Dev

如何在C#中获取已安装的操作系统版本号

来自分类Dev

如何在批处理文件中获取程序的主要、次要等版本号?

来自分类Dev

如何在 React-Native 中获取 Android 版本号?(不是 API 级别编号)

来自分类Dev

如何在iOS SDK中优化获取数据文件版本号?

来自分类Dev

如何在Powershell中添加参数以更改文件目的地和版本号

来自分类Dev

如何在Teamcity中设置内部版本号?

来自分类Dev

如何在PHP中获得最高版本号/标签

来自分类Dev

如何在Teamcity中设置内部版本号?

来自分类Dev

如何在 .Net Core 中设置默认版本号

来自分类Dev

如何获取快照包的版本号?

来自分类Dev

如何获取快照包的版本号?

来自分类Dev

如何使用sed获取版本号

Related 相关文章

  1. 1

    如何在POM中获取Maven版本号

  2. 2

    如何在Java中获取Tomcat版本号

  3. 3

    如何在OS X中获取Bash版本号

  4. 4

    如何在 Android 中获取 Jenkins 内部版本号?

  5. 5

    如何从输出中获取版本号

  6. 6

    如果我有基准和版本号,我如何以大写形式获取活动名称

  7. 7

    在Bash中获取库名称和扩展名之后的版本号

  8. 8

    如何使用shell命令仅获取PHP的版本号?

  9. 9

    如何在xcode> = 12.3中更改版本和内部版本号

  10. 10

    如何在工件名称中设置詹金斯内部版本号

  11. 11

    如何解决flywaydb中脚本的版本号冲突

  12. 12

    如何在墙纸上获取Ubuntu版本号?

  13. 13

    如何使用SVN和Maven获取内部版本号?

  14. 14

    用于脚本的最新 Joomla 发行版本号

  15. 15

    如何在TfvcTemplate.12.xaml中获取内部版本号

  16. 16

    如何在C#中获取已安装的操作系统版本号

  17. 17

    如何在Jenkins工作流程插件中获取SVN版本号?

  18. 18

    如何在C#中获取已安装的操作系统版本号

  19. 19

    如何在批处理文件中获取程序的主要、次要等版本号?

  20. 20

    如何在 React-Native 中获取 Android 版本号?(不是 API 级别编号)

  21. 21

    如何在iOS SDK中优化获取数据文件版本号?

  22. 22

    如何在Powershell中添加参数以更改文件目的地和版本号

  23. 23

    如何在Teamcity中设置内部版本号?

  24. 24

    如何在PHP中获得最高版本号/标签

  25. 25

    如何在Teamcity中设置内部版本号?

  26. 26

    如何在 .Net Core 中设置默认版本号

  27. 27

    如何获取快照包的版本号?

  28. 28

    如何获取快照包的版本号?

  29. 29

    如何使用sed获取版本号

热门标签

归档