티스토리 뷰

어플리케이션 빌드 및 배포를 할 때는 sell script 를 많이 사용하는 편입니다.

매일 그 때 그 때 중구난방으로 작성한 스크립트를 볼 때마다 항상 제대로 작성해야겠다라는 생각을 했었는데, 기회가 닿아 함수로 기능을 구분하고 input과 return 을 잘 사용해보려 하다가 멘탈이 깨질뻔 했지요.

여기서는 쉘 스크립트 함수를 사용할 때 인자를 넘겨받는 방법과 리턴하는 방법에 대해 알아보겠습니다.

  • 인자 넘기고 받는 방법
  • 리턴하고 받는 방법

인자 남기고 받는 방법

우선은 쉘 스크립트 함수 형태를 보겠습니다.

function sample_func() {
  ...
}

# or

sample_func2() {

}

쉘 스크립트에서 함수는 위 처럼 사용합니다.

함수 호출 방법:

sample_func

단순하죠? 그럼 인자를 넘겨보겠습니다.

sample_func hello world

쉘스크립트는 다른 언어들과 다르게 () 를 사용하지 않더군요. 띄어쓰기 단위로 인자를 구분합니다. 이걸 이해하시면 xargs 명령도 금방 이해 되실거예요.

그럼 인자를 함수 내부에서 어떻게 받아서 사용하지는 볼게요.

function sample_func() {
  arg1=$1
  arg2=$2

  echo "${arg1}, ${arg2}"
}

sample_func hello world

# hello world

저 하나의 함수는 하나의 쉘 스크립트 파일 이라고 생각하시면 됩니다.

여기서 $0 은 무엇일까요? 바로 함수 이름이 되겠습니다.

리턴하고 받는 방법

쉘 스크립트에서는 함수로부터 리턴받는 방법이 2가지 정도 있는거 같아요.

하나는 echo 를 통해
다른 하나는 return 이나 exit 를 통해 받을 수 있어요.

echo 를 통해 리턴받기

echo 는 커맨드라인에 출력하기 위한 도구로 알고 있는데요, 이것을 응용하면 return 과 같은 효과를 볼 수 있어요.

function sample_func() {
  arg=$1

  echo "${arg}OK"
}

returnValue=$(sample_func test)

echo "${returnValue}"

## testOK 가 출력되요

sample_func test 를 보면 명령어 실행하는것과 똑같아요.

sample_func.sh test 라는 거죠.

주의! echo 가 여러개 호출되면 여러개를 받아와요. echo 가 여러번 실행되지 않도록 주의해서 사용해야합니다.

return 이나 exit 를 통해 리턴받기

echo 와는 다르게 return 이나 exit 가 실행되면 해당 함수를 빠져나오는 효과도있어요.

function sample_func2() {
  $arg=$1

  return $(($1 + 1))
}

sample_func2 1
result=$?
echo ${result}

# 2

$? 는 방금 전에 실행된 결과 값을 확인 할 수 있어요. 저 위에서 return 대신에 exit 를 사용해도 결과는 동일해요.

단, exit 는 현재 스크립트를 종료해버려요. 애는 다른 프로세스에서 실행될 때 왜 종료됐는지 확인하게 할 때 사용되요.
반대로 return 은 해당 함수만 종료되요.