Bash脚本将操作系统+版本作为字符串获取

时间:2014-08-21 14:41:49

标签: bash

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

获取这些信息的可能方法来自

  • 的/ etc /问题
  • cat / etc / * - release
  • lsb_release -a

可能还有其他一些我不知道的人。问题是我希望bash脚本能够在Ubuntu 12,13,14和CentOS上运行。上述一些在这些系统中不起作用。例如,lsb_release在CentOS上不起作用,有时/ etc /问题是空的,所以我对此感到困惑。

至于字符串我想以这种方式得到它(并将其保存到var)。我会举例说明。

  

如果操作系统是Ubuntu 12.x 我想将其视为 ubuntu12

     

如果操作系统是Ubuntu 13.x 我想将其视为 ubuntu13

     

如果操作系统是CentOS 7.x 我想将其视为 centos7

这很容易吗?

谢谢你

1 个答案:

答案 0 :(得分:1)

这是一个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_release

#!/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

在任何情况下,都有不止一种方法可以给这只猫上皮。