[Shell Script] 쉘 스크립트 함수나 실행에서 반환값(Return Value) 얻기

쉘 스크립트에서 함수나 스크립트의 실행결과를 받아보자


환경 및 선수조건

  • 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


참고자료