2013-05-03 51 views
4

我需要为每个系统制作不同的脚本。今天,即使在微软窗口,mac,linux,hp-ux,solaris等上也可以运行bash ...如何识别bash脚本中的哪个操作系统

如何确定我正在使用哪些操作系统?我不需要确切的版本,我只需要知道,如果我在Windows,Linux和Solaris ...

+0

是非常有可能的是一样的,但我不会删除这一点,只是因为我想有些用户会搜索什么,我问,我在谷歌上搜索这个并找不到链接的答案 – Petr 2013-05-03 11:52:02

回答

2

有一个标准的外壳命令“UNAME”返回当前平台作为字符串

要在外壳程序中使用这个典型的节可能是

#!/bin/sh 



if [ `uname` = "Linux" ] ; 
then 
    echo "we are on the operating system of Linux" 
fi 

if [ `uname` = "FreeBSD" ] ; 
then 
    echo "we are on the operating system of FreeBSD" 
fi 

更具体的信息是可用的,但不幸的是它根据平台而变化。在许多版本的Linux(和ISTR,Solaris)上,都有一个/ etc/issue文件,其中包含安装的发行版的版本名称和编号。因此,在Ubuntu

if [ -e "/etc/issue" ] ; 
then 
issue=`cat /etc/issue` 
set -- $issue 
if [ $1 = "Ubuntu" ] ; 
then 
    echo "we are on Ubuntu version " $2 
fi 
fi 

这会给版本信息

+0

@ChetterHummin这篇文章有什么问题?它*只是正确*。在您的终端输入'uname'查看 – hek2mgl 2013-05-03 10:13:21

+0

@ChetterHummin添加了大量附加信息 – Vorsprung 2013-05-03 11:04:31

+0

@Vorsprung谢谢 – 2013-05-03 15:01:06

0

我会看看

uname -a 

输出和寻找特定字符串,这可以帮助您识别系统。

或多个特定

uname -s 

在Windows中,你的意思是这样的cygwin?

0

bash有一个叫做$OSTYPE的全局变量。键入回声$OSTYPE看到:

echo "$OSTYPE" 
// linux-gnu 

bash man page

OSTYPE自动设置为描述了正在运行bash的操作系统的字符串。默认值是系统相关的。


一种替代方法是使用uname命令(不带任何参数)或uname -s它所相同uname默认为-s。在Linux

uname 
// Linux 
+0

-o在HP-UX上未作为示例知道 – Devolus 2013-05-03 09:50:51

+0

从未登录过此类框。我应该这样做:)你会建议什么? '-s'?这是我以前的。不知道 – hek2mgl 2013-05-03 09:52:07

+0

是的,-s给你的操作系统。朴素的'uname'应该是'uname -s'的捷径,但我想这并不会让人觉得很明显。 – Devolus 2013-05-03 09:54:08

相关问题