2015-11-04 70 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