我正在编写一个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
命令或其他内容上应用正则表达式?
谢谢..
答案 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 --help
或man 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