函数中的返回码和整体返回码

时间:2019-04-01 06:37:57

标签: function sh

具有一个脚本,该脚本涉及编写列出每个函数中的返回代码的函数。

  • 0,表示成功
  • 如果发生严重错误则为1
  • 如果是基于严重程度的警告,则为127

示例: 脚本:

critical function 1{
 typeset retval=0
success: return 0
failure: return 1
return $retval
}

lessimp check function 2{

typeset retval=0
success: return 0
failure: return 127 (since its not a critical function and just a warning for me)
return $retval
}

我如何为具有多种功能的脚本提供总体返回代码。如果一切成功,我想将整个脚本的返回码设置为0。如果关键功能失败,则退出1;如果只是警告,则退出127。

我该怎么做?

1 个答案:

答案 0 :(得分:0)

您可以维护两个全局变量(也许是haswarningshaserrors)。

函数每次返回时都会更新相应的值。

在脚本末尾,检查值并适当返回:

#!/bin/sh

haserrors=0
haswarnings=0

update_global_return(){
    # must call immediately after function of interest
    # otherwise "$?" will no longer have correct value
    returncode="$?"
    case "$returncode" in
        127) haswarnings=1 ;;
        1)   haserrors=1 ;;
    esac
    # reset "$?"
    return "$returncode"
}

do_global_return(){
    # could use exit instead of return here
    case "$haserrors,$haswarnings" in
        1,*) return 1 ;;
        0,1) return 127 ;;
        *)   return 0 ;;
    esac
}

# ...

critical_function_1
update_global_return

# ...

lessimp_check_function_2
update_global_return

# ...

do_global_return