код возврата в функциях и общий код возврата - PullRequest
1 голос
/ 01 апреля 2019

Наличие сценария, который включает в себя написание функций, которые перечисляют код возврата в каждой из них.

  • 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 голосов
/ 02 апреля 2019

Вы можете поддерживать две глобальные переменные (возможно, haswarnings, haserrors).

Каждый раз, когда функция возвращает, вы обновляете соответствующее значение.

В конце скрипта,проверьте значения и верните соответственно:

#!/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

...