如何使用shell脚本查找Linux Distribution名称?

时间:2015-04-11 18:51:28

标签: regex linux bash shell operating-system

我正在编写一个shell脚本,我需要使用当前的操作系统名称来使其成为通用的。像:

if [ $Operating_System == "CentOS" ]
then
    echo "CentOS";
    # Do this
elif [ $Operating_System == "Ubuntu" ]
then
    echo "Ubuntu";
    # Do that
else
    echo "Unsupported Operating System";
fi

怎么可能?在lsb_release -a命令或其他内容上应用正则表达式?

谢谢..

7 个答案:

答案 0 :(得分:7)

$ lsb_release -i
Distributor ID: Fedora
$ lsb_release -i | cut -f 2-
Fedora

答案 1 :(得分:5)

您可以从lsb_release获取信息:

echo "$(lsb_release -is)"

i代表经销商ID。

s代表简短。

对于前。它会显示Ubuntu而不是Distributor Id: Ubuntu

还有其他选择:

  

-r:release

     

-d:description

     

-c:代号

     

-a:全部

您可以通过运行lsb_release --helpman lsb_release

来获取此信息

答案 2 :(得分:3)

DISTRO=$( cat /etc/*-release | tr [:upper:] [:lower:] | grep -Poi '(debian|ubuntu|red hat|centos|nameyourdistro)' | uniq )
if [ -z $DISTRO ]; then
    DISTRO='unknown'
fi
echo "Detected Linux distribution: $DISTRO"

答案 3 :(得分:2)

试试这个:

awk '/^ID=/' /etc/*-release | awk -F'=' '{ print tolower($2) }'

答案 4 :(得分:0)

对于几乎所有的Linux发行版,cat /etc/issue都可以解决问题。

编辑:显然,没有任何解决方案可以适用于所有发行版,因为发行版免费可以随意执行。

进一步澄清:这不能保证工作 - 没有 - 但根据我的经验,这是最常用的方法。实际上,这是唯一方法一致地工作(lsb_release,这里提到的,经常产生command not found)。

答案 5 :(得分:0)

这是我得到的:

#!/bin/bash

dist=$(tr -s ' \011' '\012' < /etc/issue | head -n 1)

check_arch=$(uname -m)

echo "[$green+$txtrst] Distribution Name: $dist"

答案 6 :(得分:-3)

我会使用uname -a

robert@debian:/tmp$ uname -a
Linux debian 3.2.0-4-686-pae #1 SMP Debian 3.2.65-1+deb7u2 i686 GNU/Linux