2012-12-19 40 views
5

嗨,我是新来的bash脚本。刚刚写了这个简单的程序,但它是抛出错误。在bash中的字符串比较不起作用

#!/bin/bash 
os=`uname -o` 
echo $os 
if ["$os"=="GNU/Linux"] ; then 
    echo "Linux" 
else 
    echo "Windows" 
fi 

使用==或当量为这两种情况下,我发现了以下错误,它是打印其他condn。

./ostype.sh:行3:[GNU/Linux的==的GNU/Linux]:没有这样的文件或目录

视窗

击版本:GNU bash中,3.2版本.48(1)-release(x86_64-suse-linux-gnu)

+0

这个问题已经回答了,看到这个链接[1] [1]:http://stackoverflow.com/questions/394230/detect-the-os-from-a-bash-script – mana

+0

随着适当的间距'='和'=='应该可以用来比较字符串。 '-eq'是一个整数比较。 – Hennes

回答

17

尝试

if [ "$os" = "GNU/Linux" ] 

笔记的空间,单=

[实际上是一个程序,其余的是争论!

+1

对于'[其实是一个程序,剩下的就是论点!'..很多人都不知道它。就连我几个月前都不知道。 :-) – anishsane

+0

为了所有的意图和目的,你可能想使用shell内建的'[[',这可能更快。 – yiding

+1

噢......我想''''也被内建的shell覆盖。就像'[[&'echo' ... – anishsane

5

使用=进行字符串比较。请参阅:http://tldp.org/LDP/abs/html/comparison-ops.html

而且,应该有前后的方括号的空间和比较运算,即

if [ "$os" = "GNU/Linux" ]; then 
^^ ^^   ^ 
    | |  | |   | 
    \-\-----\-\-----------\-- (need spaces here) 
+0

不!同样的错误是抛出 – Reuben

+0

@Reuben注意编辑空间。 –

+0

明白了:)谢谢! – Reuben