Program Club

쉘 스크립팅에서 예외 처리?

proclub 2020. 11. 4. 20:58
반응형

쉘 스크립팅에서 예외 처리?


쉘 스크립트에서 예외 처리 메커니즘을 찾고 있습니다. 쉘 스크립트에 try, catch 동등한 메커니즘이 있습니까?


실제로 try/catchin bash 는 없지만 (bash를 사용하고 있다고 가정합니다) &&또는 사용하여 매우 유사한 동작을 얻을 수 있습니다 ||.

이 예에서는 실패fallback_command 할 경우 실행하려고 a_command 합니다 (0이 아닌 값 반환).

a_command || fallback_command

이 예에서는 성공second_command 하면 실행하려고합니다 (0 반환).a_command

a_command && second_command

그들은 쉽게 예를 들어, 다음 명령이 실행됩니다, 서브 쉘을 사용하여 혼합 함께이 될 수 있습니다 a_command그것은 다음 실행 성공하면, other_command하지만 경우 a_command또는 other_command, 실패 fallback_command실행됩니다 :

(a_command && other_command) || fallback_command

if / else 구조 및 종료 코드는 일부를 위조하는 데 도움이 될 수 있습니다. 이것은 Bash 또는 Bourne (sh)에서 작동합니다.

if foo ; then
else
  e=$?        # return code from if
  if [ "${e}" -eq "1"]; then
    echo "Foo returned exit code 1"
  elif [ "${e}" -gt "1"]; then
    echo "Foo returned BAD exit code ${e}"
  fi
fi

    {
        # command which may fail and give an error 
    } || {
       # command which should be run instead of the above failing      command
    }

다음은 bash에서 이벤트 처리를 활성화하는 두 가지 간단한 bash 함수입니다 .

다음과 같이 기본적인 예외 처리에 사용할 수 있습니다.

onFoo(){
  echo "onFoo() called width arg $1!"
}  

foo(){
  [[ -f /tmp/somefile ]] || throw EXCEPTION_FOO_OCCURED "some arg"
} 

addListener EXCEPTION_FOO_OCCURED onFoo

try / catch 블록을 사용한 예외 처리는 bash에서 지원되지 않지만이를 지원하는 BANGSH 프레임 워크를 살펴보고 싶을 수 있습니다 (bash의 jquery와 약간 비슷 함).

그러나 , 시도 / 캐치 블록을 계단식없이 exceptionhandling하는 것은 유사하다 eventhandling , 입니다 거의 가능한 모든 배열을 지원하는 언어입니다.

코드를 멋지고 깔끔하게 유지하려면 (if / else 자세한 정보없이) 이벤트를 사용하는 것이 좋습니다.

MatToufoutu가 권장하는 제안 (|| 및 && 사용)은 함수에는 권장되지 않지만 간단한 명령 에는 좋습니다 . ( 위험에 대한 BashPitfalls 참조 )


error_exit가 하나의 인수를받는 함수 인 경우 다음을 사용하여 오류를 올바르게 처리합니다. 인수가 전달되지 않으면 실제로 오류가 발생하는 LineNo와 함께 알 수없는 오류가 발생합니다. 실제로 생산에 사용하기 전에 실험하십시오-

#!/bin/bash

PROGNAME=$(basename $0)

error_exit()

{

    echo "${PROGNAME}: ${1:-"Unknown Error"}" 1>&2
    exit 1
}

echo "Example of error with line number and message"
error_exit "$LINENO: An error has occurred."

참고 URL : https://stackoverflow.com/questions/6961389/exception-handling-in-shell-scripting

반응형