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 |