BASH - 函数返回错误的值

时间:2016-08-05 04:32:18

标签: bash shell

自从我编写脚本以来已经有一段时间了。我一开始就没好开始......

我正在研究一个测试oracle数据库连接的脚本。

testDB() {
    [[ $(tnsping $tnsName | grep -c WRONG)==1 ]] && return 1
    return 0
}

testDB
status="${?}"
echo "Status value= " $status

我期待我的回音值为0,但不知怎的,我的状态在回声中显示为1。

我在这里做错了什么?

EDIT2:

我原来的代码是:

testDB() {
    [[ $(tnsping $tnsName | grep -c OK) -eq 1 ]] && return 1
    return 0
}

我的$ tnsName包含一个正确的值,grep计数为1,但我的函数返回0.

2 个答案:

答案 0 :(得分:4)

不需要变量,也不需要grep -c。只需使用grep -q(无输出),返回一个真/假标志:

testDB() {
    tnsping $tnsName | grep -q OK
    }

testDB
echo "Status value= " $?

答案 1 :(得分:0)

第二行&&。它是一种同时执行多个语句的方法,其工作方式与许多其他语言中的布尔“和”类似。这指示bash会话同时执行复合测试命令和return 1语句。

我理解你的意图是返回1是测试是真的,否则返回0.如果是这样的情况就这样写。

testDB() { if [[ $(tnsping $tnsName | grep -c WRONG)==1 ]]; then return 1 else return 0 fi }

我希望有所帮助。