알아두면 유용한 기본적인 Shell script 문법

Andrew·2024년 1월 14일
0
post-thumbnail

Why Shell script?

모바일 개발을 하다 보면 다양한 이유로 Shell script가 사용될 수 있다.
필자는 iOS 개발을 하기 때문에 Swift를 주로 사용하지만 개발 생산성을 올리거나 CI/CD 파이프라인을 구성해야 하는 일이 종종 생길 때 shell script로 로직 구성을 선호한다.
(ruby script 같은 다른 것도 사용해 보았지만 결국 대부분의 환경에서 별도의 환경 구성없이 사용가는 한 점에서 shell script를 선호하는 것 같다)

그동안 Shell script를 자주 사용하긴 했지만 필요한 순간에 찾아보고 사용하는 방식으로 언어를 습득했기 때문에 남들에게 설명을 하거나, 체계적으로 머릿속에 정리되어 있지 않다. 그래서 이번 기회에 shell script를 명확하게 이해하고 사용하고자 정리해 보았다.

문법

셔뱅(Shebang)

shell script의 첫 번째 줄은 Shebang을 써준다. #!를 쓰고 어떤 shell을 사용할지 지정하는 형태이다

#!인터프리터경로

#!/bin/bash

일반적으로 bash shell을 사용할 경우 위처럼 사용해준다.

변수

Shell script에서 변수는 타입 명시 없이 선언해 준다. 선언 시에도 정수, 상수 여부를 표기하지 않아도 된다.

variable="Hi"
variable2=10
variable3=3.14159 
variable=(0 1 2 3 4) #배열

변수 선언 시 중요한 점은 = 사이에 띄어쓰기를 하면 안 된다는 것이다!

변수의 참조

shell script는 변수를 참조하는 것이 가능하다 이는 '$'를 변수 앞에 붙이면 된다.

variableHI = "Hi"
echo "$variableHI I'm Andrew" # "Hi I'm Andrew"
osType=("iOS", "Android")
echo ${osType[0]} # iOS 

만약 $에 ?를 붙이면 최근 실행된 명령어의 종료 코드를 출력한다.

echo "$?"

Command Line Arguments

쉘 스크립트는 다른 프로그램에 의해 실행되거나 내부적으로 사용되는 값을 전달받을 때 command line arguments를 사용한다.

command line arguments의 사용방법은 터미널에서 쉘 스크립트를 실행할 때 파일명 옆에 arugment들을 명시하는 것이다.

sh test.sh 전달받을값1 전달받을값2 전달받을값3 

그리고 이를 내부에서 사용할 땐 $N의 형태로 사용한다.

echo $0 #전달받을값1 출력
echo $1 #전달받을값2 출력
echo $2 #전달받을값3 출력

*command line arguments를 잘 활용하면 CI / CD 파이프라인을 구성할 때 shell script를 실행하는 파이프라인의 환경 같은 외부 값을 전달하여 적절히 활용할 수 있으니 알아두면 좋다.

IF 구문

if 문은 아래의 문법으로 사용한다.

if [조건]; then
	#조건이 true일 경우
else 
	#조건이 false일 경우
fi 

만약 else if 문을 사용하고 싶으면 어떻게 해야 할까? 바로 elif를 사용하면 된다.

if [ A ]; then
	echo A
elif [ B ]; then
	echo B
elif [ C ]; then
	echo C
else
	echo "Nothing"
fi

위 예제에서는 else를 사용했지만 else 없이 elif 다음에 fi로 조건문을 종료해도 무관하다.

For 구문

For 문은 아래와 같은 문법으로 동작한다

for i in {반복범위}; do
	#반복 실행될 코드
    echo i
done 

위에 명시한 "반복 범위"는 여러 형태로 표현이 가능하다

{0..5} # 0부터 5까지 총 6번 
{0..10..2} # 0부터 10까지 2씩 증가
{10..0..-2} # 10부터 0까지 2씩 감소

만약 C언어처럼 for 문을 구성하고 싶으면 아래 코드처럼 작성해도 된다.

for ((i=0; i<num; i++)); do
	echo $i
done

While 구문

while 문도 for와 비슷한 형태로 작성된다.

while [ 반복조건 ]; do
	# 실행할 구문
done

while 문은 break를 지원해서 아래처럼 사용하는 것도 가능하다.

while true; do
	echo "hi"
    break
done

Case 구문

shell script에서는 switch -case와 유사하게 Case 문을 지원한다.

case "$변수" in
	"경우1")
    	;;
    "경우2")
    	;;
    "경우3")
    	;;
    *) # 어떠한 경우에도 해당되지 않을때 실행됨, Swift switch case의 default와 유사한 기능
    	;;
esac

더블 세미콜론을 사용하여 case를 종료한다.

함수

함수는 아래 문법으로 작성한다. function 키워드는 생략할 수 있다.

function 함수이름 { 
	# 실행할 내용
}

다른 언어와 다르게 함수에 전달될 파라미터는 별도의 이름 없이 사용이 가능하다. 파라미터 구분을 위해 $n 형태의 표현을 사용한다.

printMenu() {
	echo "오늘 먹을 점심은 $1, $2"
}
printMenu 라면 단무지

또 리턴 타입을 따로 지정하는 것도 불가능하다. 하지만 함수의 결과를 함수 외부에서 사용하고 싶을 때는 echo를 활용하면 된다.

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

result=$(sum 10 20)
echo "10 + 20는 $result"

끝으로

이번에는 기본적인 Shell script 문법을 정리해 봤다. 활용도가 무궁무진한 만큼 다양한 예제로 shell scrip를 어떻게 사용하면 좋을지 시리즈 형태로 준비해 봐야겠다~

꿀팁
-surf 같은 옵션은 맥에서 지원되지 않는다.

profile
je suis un voyageur

0개의 댓글