shell script

#4 switch-case문, 함수

Sila 2023. 1. 14. 23:19

1. switch, case문

switch , case문은 다음과 같이 써줄 수 있다.

 

#!/bin/bash

case [변수] in
	case1)
    	[case1일 경우 수행할 작업]
        ;;
    case2)
    	[case2일 경우 수행할 작업]
        ;;
    ...
    
    *)
    	[default로 수행할 작업]
      	;;
esac

 

예시로 다음과 같이 종족을 고르는 코드를 만들 수 있다.

 

#!/bin/bash

case $1 in
	# $1 == protoss인 경우
	protoss)
    	echo "select protoss"
        # semicolon 2개로 각 case들을 구분한다.
        ;;
    terran)
    	echo "select terran"
        ;;
    zerg)
    	echo "select zerg"
        ;;
    # default는 다음과 같이 *)로 표시해준다.
    *)
    	echo "random"
        ;;
# case를 역순으로 쓴 esac 로 case문을 닫아준다.
esac

 

./case.sh terran
> select terran

 

2. evalution

우리가 어떤 값들을 연산한 값들을 사용하고 싶다면 쉘 스크립트에서는 조금 더 주의를 기울여 값을 추적해야한다.

 

예를 들어 다음과 같이 연산의 결과물을 출력하고 싶을 때가 있다.

 

#!/bin/bash

echo 5+3

 

이러면 쉘은 5+3의 결과값인 8을 출력해주는 것이 아니라,

 

5, +, 3 각각을 string으로 인식해 "5+3" string을 그대로 출력한다.

 

원래 우리의 의도대로 5+3 연산의 결과값인 8을 출력하고 싶다면 약간의 추가적인 처리를 해주어야 한다.

 

(이 처리의 구체적인 syntax는 mac과 linux가 약간 다른 듯)

 

다음과 같이 5+3 (string)을 $와 ()로 묶고 다시 실행해보자.

 

#!/bin/bash

echo $((5+3))

 

이번엔 연산을 실행하고 그 결과값을 출력해 줄것이다. (mac 기준)

 

비슷한 방식으로 연산 뿐 아니라 명령어의 수행 결과 값도 다룰 수 있다.

 

다음과 같이 ls 명령어를 수행해 나온 결과값 각각을 반복문으로 출력해주는 코드를 짤 수도 있다.

 

#!/bin/bash

for i in $(ls); do
    echo item : $i
done

3. 함수

3.1 함수 선언, 호출

함수를 선언하고 사용하는 방법에 대해 알아보자.

 

#!/bin/bash

# 함수 선언
function test_func() {
	echo "hello world"
}

# 함수 호출
# 호출할 때는 괄호 없이 함수 이름만 적으면 된다.
test_func
> hello world

 

특이한 점은 앞에 function을 붙이지 않고도 함수를 정의, 호출 할 수 있다는 점이다.

 

#!/bin/bash

# 함수 선언 (without "function")
test_func2() {
	echo "hello again"
}

test_func2
> hello again

 

3.2 전역 변수 vs 지역 변수

만약 전역 변수와 동일한 이름을 가진 변수를 함수 내의 지역변수로 선언하고 싶다면 다음과 같이

 

지역 변수에 local을 붙여주면 된다.

#!/bin/bash

myNum=5

function printNum() {
	# 전역 변수와 동일한 이름의 지역변수 선언
	local myNum=3
    
    echo $myNum
}

printNum
> 3

 

3.3 매개 변수

쉘 스크립트에서는 함수를 호출할 때 괄호를 쓰지 않으므로 매개변수를 입력하는 공간이 따로 없다.

 

그냥 한 칸 띄고 넣어주면 된다.

 

#!/bin/bash

function sum() {
	echo $(($1+$2))
}

sum 5 3
> 8

 

아까 evaluation 기능을 약간 활용하는 함수도 하나 만들어보자.

 

#!/bin/bash

test_func3() {
    a1=$(($1+$2))
    a2=$(($1-$2))
    
    echo $a1
    echo $a2

    echo $(($a1 * $a2))
}

test_func3 7 10

 

여기까지 하면 쉘 스크립트의 기초적인 문법은 어느 정도 익힌 것 같고,

 

이제 쉘 스크립트를 실전에서 활용할 수 있도록 해주는 기능 (리디렉션, 압축/해제, 파일 읽기 등)들에 대해 공부해봐야겠다.

'shell script' 카테고리의 다른 글

#3 조건문, 반복문  (0) 2022.12.18
#2 변수 선언, 기호  (0) 2022.12.13
#1. shell  (0) 2022.12.10