쉘 스크립트에서 함수나 스크립트의 실행결과를 받아보자
환경 및 선수조건
- Linux 기반 시스템에 대한 이해
- Bash shell(/bin/bash)의 사용법
Shell에서의 반환값?
Shell Script에서의 값 반환
- 일반적으로 shell script에서는 우리가 아는 컴퓨터 언어에서의
return
반환값이 없습니다. - shell script가 실행되는 프로세스에서
exit
을 통해 상태 종료 표시만을 프로세스 실행 결과로 반환할 수 있습니다. - 일반적으로
0
은 성공을 나타내며 나머지인1 ~ 255
는 에러를 나타냅니다.
exit의 예시 확인
- 간단하게 예시를 확인해 보겠습니다.
- 아래처럼 없는 명령어를 아무거나 입력하고 실행해서 오류가 떴음을 확인하고
$?
를 통해서 방금 명령어에 대한 exit code를 확인합니다. $?
는 방금 실행된 프로세스가 반환한 결과값을 저장하고 있습니다.
$ error_command
error_command: command not found
$ echo $?
127
Shell 스크립트 함수에서 결과값 받기
- 일반적인 언어처럼 return과 같은 결과를 얻고 싶을 때는 2가지 방법을 사용할 수 있습니다.
$(명령어 or 쉘 스크립트 실행 or 쉘 스크립트 함수)
와 같이$
와()
안에 명령어, 쉘 스크립트 또는 쉘 스크립트 함수를 넣으면 해당 부분들을(명령어, 쉘 스크립트 또는 쉘 스크립트 함수) 실행할 subshell을 호출합니다.- 해당
$()
를 통한 subshell 생성은 부모 shell의 변수나 값들을 가져오기 때문에 함수도 변수도 다 사용할 수 있습니다. 다만, subshell의 결과가 부모 shell에 영향을 주지는 않습니다. - subshell을 호출하지만
$$
를 통해서 PID를 출력하면 parent shell의 프로세스 아이디를 호출합니다.
(방법1) echo를 통해서 값 전달 받기
- 다음 아래처럼 subshell로 함수나 명령어를 실행해서 결과를 가져올 수 있습니다.
#!/bin/bash
get_result_func () {
test=123456
# echo 함수를 통해서 결과를 전달
# return "Result is ${test}"라고 생각하시면 됩니다.
echo "Result is ${test}"
}
# 다음 아래와 같이 함수 호출의 결과를 변수에 받습니다.
ret_value=$(get_result_func)
echo $ret_value
$ ./shell_script_practice.sh
Result is 123456
(방법2) 변수 공유하기
- 다음처럼 변수를 전역으로 선언하고 해당 변수를 이용해서 사용할 수 있습니다.
#!/bin/bash
ret_value=""
get_result_func () {
# Do Something
ret_value="aaaaaaaaa"
}
get_result_func
echo $ret_value
$ ./shell_script_practice.sh
aaaaaaaaa
참고자료
- https://stackoverflow.com/questions/8742783/returning-value-from-called-function-in-a-shell-script
- https://stackoverflow.com/questions/17984958/what-does-it-mean-in-shell-when-we-put-a-command-inside-dollar-sign-and-parenthe
- https://wiki.kldp.org/HOWTO/html/Adv-Bash-Scr-HOWTO/exit-status.html
- http://man7.org/linux/man-pages/man1/bash.1.html