[Bash] 함수 사용하기

문연수·2022년 6월 2일
0

Bash

목록 보기
2/2

Bash 스크립트는 함수 기능을 지원한다. 이를 통해 여러번 사용되는 구문들, 특정한 기능을 하는 구문들을 묶어 하나의 함수로 만들 수 있다.

1. Function Definition

#!/bin/bash
function <함수 이름> {
	<함수 구문들>
    ...
    <return <반환값>>
}

 일반적으로 위와 같은 형태를 지니며 함수를 반환하지 않아도 상관은 없다.

2. Invoke the function

 함수의 호출은 소괄호없이 그냥 함수의 이름만 작성하면 된다.

#!/bin/bash
function test {
	echo "test function"
}

test

3. Return value of the function

 함수는 return 구문을 통해 반환되어질 수 있다. 사실상 하나의 프로그램으로 볼 수 있다. 여느 프로그램과 마찬가지로 리눅스 환경에서 함수는 0 ~ 255 사이의 값을 반환할 수 있으며, $? 플레이스홀더를 이용해서 그 결과를 획득할 수 있다.

#!/bin/bash
function test {
	echo "test will return 12"
    return 12
}

test
echo "return value of test: $?"

- Return string, not integer.

Bash 스크립트를 작성하다면 보면 0 ~ 255 보다 더 크거나 작은 수, 혹은 실수, 더 나아가 문자열을 반환해야 하는 상황이 발생할 수 있다. 이러한 경우엔 return 을 통해서 그 값을 획득할 수 없다.

 그러나, 전술한 것처럼 함수는 프로그램과 비슷하게 취급되므로 해당 함수의 출력 결과를 반환값처럼 가져와 사용할 수 있다:

#!/bin/bash

function test {
        echo "hello"
}

echo "$(test) world!"

여러 개의 인자를 IFS 단위로 쪼개어 echo 함으로써, 호출자 쪽에서 이를 리스트로 받아낼 수 있다.

4. Local Variable of the function

 함수 내에서 선언한 모든 변수는 global 변수이며, 함수 밖이든 안이든, 심지어 다른 함수에서도 접근이 가능하게 된다. 따라서 함수 내부에서만 사용된다면 local 키워드를 사용해야 한다.

#!/bin/bash

num1=1
num2=2

function test {
        num1=3
        local num2=4

        echo "num1 in test: $num1"
        echo "num2 in test: $num2"
}

echo "num1: $num1"
echo "num2: $num2"

test

echo "num1: $num1"
echo "num2: $num2"

5. Argument of the function

 함수는 외부에서 인자를 전달받을 수 있다. 각 인자는 $1, $2, ..., $n 플레이스홀더를 통해 획득할 수 있다. 각 번호는 전달된 인자의 순서를 뜻한다. $# 은 전달된 인자의 개수, $@ 는 전달된 인자 전체를 의미하며 반복문에서 placeholder 로 사용되어질 수 있다:

#!/bin/bash

function add_all {
        local result=0

        for num in $@
        do
                result=$(($result + $num))
        done

        echo $result
}

result=$(add_all 1 2 3 4 5)
echo "result: $result"

~ $ ./test.sh
~ $ result: 15

- Reference

[사이트] https://linuxize.com/post/bash-functions

profile
2000.11.30

0개의 댓글