2015-11-04 73 views
0

正确调用我有一个检查,如果操作系统是Linux或Mac此bash的代码,我用从其它函数调用的函数isWhat。功能是不是在bash

function isWhat 
{ 
    if [ `uname` == $1 ]; 
    then 
    return 1 
    else 
    return 0 
    fi 
} 

function isLinux 
{ 
    return isWhat("Linux") 
} 

function isMac 
{ 
    return isWhat("Darwin") 
} 

但是,我得到了这些错误:

/functions.sh: line 13: syntax error near unexpected token `(' 
/functions.sh: line 13: ` return isWhat("Linux")' 
runme.sh: line 7: isMac: command not found 

可能是什么问题?

+0

另外,根本不要使用'function'关键字;它使您的脚本与POSIX sh不兼容,原因不明。 'isWhat(){'足以启动一个函数,并且使用该形式保持与纯POSIX shell的兼容性。 –

+1

顺便说一句,你在这里也有其他的错误 - 你在扩展周围缺少引号(这是一个“真正的”错误,即使你唯一的目标是bash),并且==不能保证通过POSIX标准(标准化的字符串比较运算符是'=',而不是'==')在'[]'内部工作。尝试通过运行http://shellcheck.net/来自动检查引用错误。 –

+0

......作为一个实践问题,如果你正在编写一些东西作为包含文件并使用bash-only语法,请将其命名为“.bash”,而不是“.sh”。 –

回答

0

这是修复一些错误后的工作代码。

function isWhat 
{ 
    if [ "`uname`" = $1 ]; 
    then 
    echo 1 
    else 
    echo 0 
    fi 
} 

function isLinux 
{ 
    isWhat "Linux" 
} 

function isMac 
{ 
    isWhat "Darwin" 
} 

的使用量(假设前面的功能在abc.sh)

source abc.sh 
echo $(isMac) 
if [ $(isMac) == 1 ]; 
then 
    echo "A" 
fi 

我不知道确切原因,但我不得不添加function,使代码的工作,无论如何,我使用Mac OS X 10.11.1。

+0

fwiw,你之前用return的方式,如果你换了0/1,你可以简单地使用'if isLinux;然后... fi'。 – FatalError

-1

您正在错误地调用bash函数。

例如

return isWhat("Linux") 

应该

return isWhat "Linux" 

+0

...并没有指向'返回';只是让它“isWhat”Linux“将'isWhat'函数的返回值传递给调用者。 –

+1

此外,'return'的文档将其定义为一个整数,而不是根本调用的命令。 –

+0

也是如此。 – Matt

5

那不是你如何调用函数bash。他们的工作就像其他shell命令,即:

function isLinux 
{ 
    isWhat "Linux" 
} 

此外,return是多余的函数将返回的最后一个命令运行的退出状态。如果你想明确说明,你可以这样写:

function isLinux 
{ 
    isWhat "Linux" 
    return $? 
} 
+2

如果我们将人们指向最佳实践,我倾向于提出符合POSIX标准的函数调用语法('isLinux(){'不包含'function')。 –

+1

@CharlesDuffy:好点。 OP确实说过'bash',但是由于这个问题的关键在于检测平台,所以我更倾向于同意。 – FatalError