函数Shell脚本没有返回数据

时间:2015-08-13 03:46:51

标签: linux bash shell

function ping {
nome=$(dialog --title "Inform o endereço que deseja PINGAR" --inputbox "IP ou URL - \
    Lembrando que será disparado 10 pings para o endereço informado." 10 45 --stdout)
status=$?
if [[ $status -eq 0 ]]; then
    ping -c 10 $nome
    rc=$?
    if [[ $rc -eq 0 ]]; then
        echo "#####################################"
        echo "## Endereço: $nome | Status: UP"  
        echo "#####################################"
    else
        echo "#####################################"
        echo "## Endereço: $nome | Status: DOWN"
        echo "#####################################"
    fi
else
    echo "Você optou por cancelar a operação."
fi }; valor=`ping`; echo "RESULTADO FOI: "$valor

当我运行脚本(./meuscript.sh)时,只有在我选择取消对话框时才会返回。

如果我在没有该功能的情况下运行脚本,则命令正确执行

1 个答案:

答案 0 :(得分:3)

你有一个无限循环。将该功能重命名为其他内容,这样您就不会ping调用ping来调用ping来调用ping ...

此外,您可能希望大幅重构脚本。任何看起来像

的东西
command
if [[ $? == 0 ]]; then
    stuff
fi

写得更好

if command; then
    stuff
fi

所以你最终会得到像

这样的东西
function renamed_ping {
    if nome=$(dialog --title "Inform o endereço que deseja PINGAR" --inputbox "IP ou URL - \
    Lembrando que será disparado 10 pings para o endereço informado." 10 45 --stdout); then
        if ping -c 10 "$nome"; then
            status="UP"
        else
            status="DOWN"
        fi
        echo "#####################################"
        echo "## Endereço: $nome | Status: $status"  
        echo "#####################################"
    else
        echo "Você optou por cancelar a operação."
    fi
}

echo "RESULTADO FOI: $(renamed_ping)"

我还冒昧地添加了proper quoting,并将一个不必要的变量分解出来,并删除了缩进中的不规则性。

(拥有函数echo并捕获它以便你可以echo它仍然是一个难闻的气味,但这看起来像你的第一个脚本练习之一。)