[shell script] 쉘 함수에서 return의 의미

HYEOB KIM·2022년 6월 2일
1

Shell

목록 보기
70/71

함수 내에서 문제가 발생했을 때 종료 코드는?

놀랍게도 쉘 스크립트에서 함수 내에 사용하는 return의 기본 용도는 함수의 종료 코드 반환입니다.

쉘 스크립트 내에 비정상적인 종료를 알아보기 위해 종료 코드를 조회할 수 있는데, 0이 아닌 종료 코드가 발생했을 때 이것이 함수 내에서 발생한 오류인지 함수 밖에서 발생한 오류인지 구분할 수 없습니다.

아래 예를 통해 확인해봅시다.

$ cat test.sh
#!/bin/bash

function func1 {
        ls badfile
}

echo 'hi'
func1
echo "$?"

$ ./test.sh
hi
ls: cannot access 'badfile': No such file or directory
2

$?를 통해 본 스크립트의 종료 코드를 출력해보았습니다.
0이 아닌 종료 코드가 발생해서 어디선가 문제가 생긴 것은 알겠는데, 출력창만 봐서는 함수 내의 문제인지 함수 외의 문제인지 판별할 수 없습니다.

$ cat test.sh
#!/bin/bash

function func1 {
        ls badfile
}

func1
echo 'hi'
echo "$?"

$ ./test.sh
ls: cannot access 'badfile': No such file or directory
hi
0

스크립트의 func1 줄과 echo 'hi'줄의 위치를 바꿔보았습니다.
종료 코드는 0이 출력되었습니다.

즉, 종료되기 직전에 명령이 성공했냐 실패했냐의 여부로 종료 코드가 출력되는 것을 확인할 수 있습니다.

이렇게 해서는 함수 내에서 문제가 발생했을 때 정확한 종료 코드를 확인하기 어렵습니다.

쉘 함수에서의 return의 의미

return을 활용하면 함수의 종료 코드를 임의로 0~255 사이의 값으로 나타낼 수 있습니다.

$ cat test.sh
#!/bin/bash

function func1 {
        read -p "Enter a value: " value
        return $value

}

func1
echo "$?"

$ ./test.sh
Enter a value: 4000
160

return을 이용하는 함수를 단순히 호출한 뒤 종료 코드를 실행하면 해당 return 값을 256으로 나눈 나머지 값을 출력합니다.

이렇게 return을 이용해서 해당 함수의 종료 코드를 임의로 설정하여 해당 종료 코드가 발생한다면 그 종료 코드와 연결되는 함수에서 문제가 발생했다는 것을 인지할 수 있게 됩니다.

profile
Devops Engineer

0개의 댓글