728x90
반응형
셸 스크립트(Shell Script)에서의 에러 핸들링은 직전에 실행된 명령어의 종료 상태(exit status)를 반환하는 변수인 「$?」를 통해 간단하게 처리할 수 있다.
『 $? 란 - 셸(Shell)에서 직전에 실행된 명령어의 종료 상태(exit status) 확인 방법 』
◆ 에러 핸들링
일반적으로 「$?」는 직전에 실행된 명령어에 대한 종료코드 번호가 반환되는데, 성공 시에는「0」, 실패 시에는「0」이외의 값이 반환되기 때문에 조건문에서 이점을 활용하여 에러를 핸들링할 수 있다.
test -f /file/temp.txt # 파일 존재 여부 확인
result=$? # 종료상태값 저장
if [ ${result} -eq 0 ]; then
# 상태 코드가 0이면 정상 완료에 따른 처리 진행
else
# 상태 코드가 0이 아니면 에러처리 진행
fi
위 예제에서는 동작에 대한 종료코드를 result라는 변수에 담아둔 뒤 조건문에서 성공 여부를 판단하는데 활용하고 있다.
만약, 결과를 변수에 담아둔 뒤 나중에 활용할게 아니라면 아래 예제와 같이 바로 결과에 대한 처리를 하는 방법도 가능하다.
test -f /file/temp.txt && echo "정상 처리" || echo "에러 처리"
◆ 종료코드
종료코드 번호가 반환값이 0 이면 성공, 0 이외는 실패를 의미한다.
종료코드 번호 | 의미 | 예제 | 비고 |
0 | 성공 | 명령이나 프로그램이 오류 없이 성공적으로 실행됨 | |
1 | 일반적인 에러 | let "var1 = 1/0" | "0으로 나누기" 및 기타 허용되지 않는 연산과 같은 기타 오류 |
2 | 쉘 내장 명령어의 잘못된 사용 | empty_function() {} | 키워드 또는 명령어가 누락된 경우 |
126 | 실행할수 없는 명령어 호출 | /dev/null | 권한 문제 또는 실행 명령이 아닌 경우 |
127 | "command not found" | illegal_command | $PATH에 문제가 있거나 명령어에 오타가 있는 경우 |
128 | 잘못된 종료인자를 넘김 | exit 3.14159 | exit는 0~255 범위의 정수 인자만 받음 |
128 + n | 치명적 에러 시그널 "n" | 스크립트의 $PPID를 kill -9 | $?는 137(128+9)을 반환 |
130 | 스크립트가 Control-C로 종료됨 | Ctrl-C | Control-C 는 치명적 에러 시그널 2번 (130 = 128 + 2, 바로 위 참고) |
255 | 종료 상태 범위 초과 | exit -1 | exit는 0~255 범위의 정수 인자만 받음 |
참조
Bash exit codes with special meanings
https://access.redhat.com/solutions/196563
글 내용 중 잘못된 부분이 있거나, 첨부하실 내용이 있으시면 댓글로 남겨주세요. 공부하는데 많은 도움이 됩니다.
-- 기억의 유효기간은 생각보다 짧다. --
728x90
반응형
'기타 > Shell' 카테고리의 다른 글
[Windows PowerShell] 로그파일 추적하기 (0) | 2024.10.15 |
---|---|
셸(Shell)에서 직전에 실행된 명령어의 종료 상태(exit status) 확인 방법 (0) | 2024.08.30 |