自从我编写脚本以来已经有一段时间了。我一开始就没好开始......
我正在研究一个测试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.
答案 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
}
我希望有所帮助。