我最近偶然发现了一些shell脚本代码,这些代码一遍又一遍地重复做同样的事情,我想知道这是否可以简化一下。
基本上在一个已定义的函数中,每次调用后都会检查返回码。如果它不为0,则完成一些输出并且函数提前退出。在这种情况下,我们故意使用return来转义函数,但不想使用exit来停止整个过程。
例如:
function _myFunc {
typeset ret=0
_myFirstSubFunc "TEST"
ret=$?
if [[ $? -ne 0 ]]; then
echo "myFirstSubFunc produced an error: $ret"
return $ret
fi
_mySecondSubFunc "TEST"
ret=$?
if [[ $? -ne 0 ]]; then
echo "mySecondSubFunc produced an error: $ret"
return $ret
fi
return $ret
}
我想减少这段重复的
代码- 检查返回码
- 如果returncode为!= 0,则输出一些信息
- 停止当前功能继续
to one call,因此代码不会因为这种检查而变得太混乱。如果之前的调用成功,函数应该继续执行。
通常,当我想中止(退出)整个进程时,一个函数就可以完成这个任务。但是,当发生错误时应该返回一个值时,事情变得(至少对我来说)有点棘手。
我尝试使用陷阱或别名,不幸的是没有成功。此外,我受限于ksh88,因此似乎不能通过使用||.
来在调用后使用一些条件语句。有什么想法,如果有别的东西,我可以减少这个繁琐的错误处理?
谢谢!
function orReport {
if "$@"; then
return
else
ret=$?
echo "$1 produced an error: $ret"
return "$ret"
fi
}
function _myFunc {
orReport _myFirstSubFunc "TEST" || return
orReport _mySecondSubFunc "TEST" || return
}