请教函数的返回值问题

sh/bash/dash/ksh/zsh等Shell脚本
回复
tongxiaobai
帖子: 8
注册时间: 2009-08-20 10:45

请教函数的返回值问题

#1

帖子 tongxiaobai » 2009-10-29 18:50

函数如下,每次调用request后,按不同等条件测试,结果返回值都是0,请帮忙指正一下,多谢了~~~

function request () {
………
case "$REQUEST" in
QUERY )
if [ "$Status" = 0 && "$Record" = 2 ]
then
return $REQUEST_OK #0
else :
fi;
if [ "$Status" = 0 && "$Record" = 1 ]
then
return $REQUEST_NULL #10
else :
fi;
if [ "$Status" = 0 && "$Record" > 2 ]
then
return $(( "$Record" + 9 ))
else :
fi;
if [ "$Status" > 0 ]
then
return $Status
else :
fi;
break
;;
DELETE )
if [ "$Status" = 0 && "$DeleteRow" = 1 ]
then
return $REQUEST_OK #0
else :
fi;
if [ "$Status" = 0 && "$DeleteRow" = 0 ]
then
return $REQUEST_NULL 10
else :
fi;
if [ "$Status" = 0 && "$DeleteRow" > 1 ]
then
return $(( $DeleteRow + 10 ))
else :
fi;
if [ "$Status" > 0 ]
then
return $Status
else :
fi;
break
;;
* )
;;
esac
}

#调用
request "$QUERY"
if [ $? = 0 ]

在这里每次都是$?都=0,哪里出错了呢,急啊
头像
xzap
帖子: 256
注册时间: 2006-08-24 21:25

Re: 请教函数的返回值问题

#2

帖子 xzap » 2009-10-29 23:44

没出错阿,你程序都正确运行了,当然返回的$?为0阿。你搞错概念了。$? 不是这样用的

$?是保存了最后所执行的命令的退出状态码.而不是函数的返回值,你的命令都正确运行了,当然返回0


如你乱打个命令

代码: 全选

sdsafdf
echo $?
那就不是0了

或者直接

代码: 全选

!:
echo $?
这样返回的是1

或者是退出时指定,如

代码: 全选

exit 64
还有好像你的函数也写错了,不知道你函数里的省略号是,瞎说下。在函数里,函数的参数不管是什么都该用$1表示第一个参数,而不是直接调用外部变量名。
tongxiaobai
帖子: 8
注册时间: 2009-08-20 10:45

Re: 请教函数的返回值问题

#3

帖子 tongxiaobai » 2009-11-02 11:38

谢谢楼上的朋友,这个问题我已经搞好了。

是这样的,一开始我想用$?来取函数的返回值,总是有问题,这种方式不好,容易出错,现在改成把结果赋值给全局变量,这样更清晰一点。

上面的脚本中if [ "$Status" = 0 && "$Record" = 2 ]里需要把=号改为==
还有case里不能有break,我又在case外层加了个while,然后在case里才可以用break
如果case里不用break的话,当某一个case匹配时,会顺序执行下面的命令行,所以结果也会有问题
回复