如何直接将bash函数的返回值放入if语句?

时间:2015-11-13 13:32:06

标签: bash function shell

我有以下检查互联网连接的功能(我知道有更好的方法来检查互联网连接,但这不是主题):

function checkInternet() {
    local HOST="http://google.com"
    local WGET="/usr/bin/wget"
    $WGET -q --tries=10 --timeout=10 --spider $HOST

    if [[ $? -eq 0 ]]
    then
        echo "online"
    else
        echo "offline"
    fi
}

现在我想直接在if语句中请求函数的返回值:

我尝试了几个类似于例如的脚本。这一个(我发现here):

if( $(checkInternet) -eq "online" )
then
    echo "Function returned online"
else
    echo "Function returned offline"
fi

我不想在if语句之前将其他变量初始化为“直接”的意思。

3 个答案:

答案 0 :(得分:2)

您可以在BASH中使用它来检查函数的输出:

[[ $(checkInternet) == online ]] && echo "Function returned online" || 
        echo "Function returned offline"

要比较条件,请使用[[...]](首选)或[...]

您可以在不评估任何条件的情况下简化上述内容:

echo "Function returned $(checkInternet)"

答案 1 :(得分:2)

case语句可以很好地执行此操作,并且没有非可移植的bashisms:

case $(checkInternet) in
  (online)  echo is online;;
  (offline) echo is offline;;
esac

您还可以让checkInter返回状态,这简化了if中的内容:

...
if [ $? -eq 0 ]; then
    true
else
    false
fi

一起
if checkInternet; then
   # online
else
   # offLine
fi

答案 2 :(得分:1)

您实际上并未从checkInternet()函数返回值。如果你看一下你发布的例子,你会发现他们的函数最后有一个return语句。