Bash脚本以获取操作系统+;作为字符串的版本

Bash脚本以获取操作系统+;作为字符串的版本,bash,Bash,我想制作一个bash脚本,将系统操作系统和版本作为一个简单的字符串 获取这些信息的可能途径是 /等/问题 cat/etc/*-释放 lsb_发布-a 也许还有其他一些我不知道的。问题是我希望bash脚本能够在Ubuntu 12、13、14和CentOS上运行。上述部分在这些系统中不起作用。例如,lsb_版本在CentOS上不起作用,有时/etc/issue是空的,所以我对此有点困惑 至于字符串,我希望以这种方式获取它(并将其保存到var)。我会举例说明 如果操作系统是Ubuntu12.x我想

我想制作一个bash脚本,将系统操作系统和版本作为一个简单的字符串

获取这些信息的可能途径是

  • /等/问题
  • cat/etc/*-释放
  • lsb_发布-a
也许还有其他一些我不知道的。问题是我希望bash脚本能够在Ubuntu 12、13、14和CentOS上运行。上述部分在这些系统中不起作用。例如,lsb_版本在CentOS上不起作用,有时/etc/issue是空的,所以我对此有点困惑

至于字符串,我希望以这种方式获取它(并将其保存到var)。我会举例说明

如果操作系统是Ubuntu12.x我想把它当作ubuntu12

如果操作系统是Ubuntu13.x我想把它当作ubuntu13

如果操作系统是CentOS7.x我想把它当作centos7

那容易吗


谢谢

这里有一个bash解决方案。我在Ubuntu上测试过,但在CentOS上没有(我现在只有RHEL可用)。但您可以测试CentOS部件,并根据需要进行修改

#!/usr/bin/env bash

RELEASE=unknown

version=$( lsb_release -r | grep -oP "[0-9]+" | head -1 )
if lsb_release -d | grep -q "CentOS"; then
    RELEASE=centos$version
elif lsb_release -d | grep -q "Ubuntu"; then
    RELEASE=ubuntu$version
fi

echo $RELEASE
或者,在CentOS上没有lsb_发布

#!/usr/bin/env bash

RELEASE=unknown

if [ -f /etc/redhat-release ]; then
    version=$( cat /etc/redhat-release | grep -oP "[0-9]+" | head -1 )
    RELEASE=centos$version
elif [ -n $(which lsb_release 2> /dev/null) ] && lsb_release -d | grep -q "Ubuntu"; then
    version=$( lsb_release -d | grep -oP "[0-9]+" | head -1 )
    RELEASE=ubuntu$version
fi

echo $RELEASE

无论如何,剥这只猫的皮的方法不止一种。

我认为最好是问这个问题,我不知道该把它放在哪里,因为它实际上是bash脚本,而不是获取系统的方法。你有没有尝试uname-a+一些字符串操作?没有,甚至没有输出发行版名称。至少在我的副总裁。我发现cat/etc/*-release实际上可以在所有发行版中使用。现在的问题是字符串。那么,您尝试了什么bash脚本?它怎么不起作用?这不是脚本服务。