
서버를 배포하거나 할 때 쉘 스크립트를 사용할 일이 자주 있더라. 그럴때마다 코드를 항상 어디서 가져와서 사용하는데.. 사실 이해를 못하고 사용한적이 대부분이었다. 뿐만 아니라 환경설정, 자동화 등에 무궁무진하게 쓰일 수 있는 쉘 스크립트이기 때문에 공부할겸 책을 구매했다!
https://product.kyobobook.co.kr/detail/S000001810353
처음 배우는 셸 스크립트 | 장현정 - 교보문고
처음 배우는 셸 스크립트 |
product.kyobobook.co.kr
실행환경
- VMWare (Ubuntu 22.04.3)
- Bash Shell
파일 생성
쉘 스크립트 파일의 확장자는 .sh 이다.
또한 파일의 시작에는 아래의 코드로 해당 파일이 쉘 스크립트 파일인것을 알려줘야 한다.
#!/bin/bash
파일 실행
파일 실행에는 두가지 방법이 있다.
- sh 명령어로 실행
sh shellScript.sh
- chmod 명령어 이용
chmod 명령어를 이용하여 쉘 스크립트 파일에 실행권한 (+x) 을 주어서 실행할 수 있도록 만들 수 있다.
chmod +x shellScript.sh
./shellScript.sh
변수 사용하기
스크립트 변수는 따로 자료형이 존재하지 않는다. 따라서 무엇이든지 할당해줄 수 있다. 기본적인 변수 할당은 변수에 '=' 연산자를 통하여 할당하고, '$' 연산자를 사용하여 스크립트 내부에서 활용할 수 있다. 또한 문자열 사이에 변수를 사용하기 위해서는 ${변수} 로 사용할수도 있다.
#!/bin/bash
language="korean"
echo "I can Speak $language"
#!/bin/bash
age=22
echo "I am ${age}years old"
* 참고로 language = "korean" 처럼 공백이 있으면 인식하지 못하니 주의하자.
함수
함수는 function 함수명() {...} 와 같이 사용할 수 있다. 호출은 함수명으로 호출하며, 매개변수는 함수명 뒤에 선언해주면 된다.
#!/bin/bash
function print() {
echo $1
}
print "hello world"
print 10

지역 변수
일반 프로그래밍에서 사용하는 지역변수가 쉘 스크립트에도 존재한다. local 키워드를 사용하여 선언할 수 있으며, 특정 함수나 area안에서만 활용이 가능하다. (함수말고 다른 경우가 있는지는 잘 모르겠다.)
#!/bin/bash
function print() {
local value="previous"
echo $value
echo $1
}
print "now"

위치 매개변수
위치 매개변수는 스크립트 수행시에 넘어오는 파라미터를 의미한다. 파라미터는 함수로도 넘길 수 있지만 스크립트 자체에 넘겨서 사용할수도 있다. 아래는 정리해둔 표이다.
매개변수 | 설명 |
$0 | 실행된 스크립트 이름 |
$1 | 파라미터 순서에 맞게 들어온 데이터, 10번째부터는 ${10} 처럼 {}으로 감싸줘야 한다. |
$* | 전체 인자 값 |
$@ | 전체 인자 값 ($* 와 동일하나, 쌍 따옴표로 감싸면 다른 결과가 나온다.) |
$# | 인자의 총 개수 |
#!/bin/bash
echo "This shell script name is $0"
echo "First parameter : $1"
echo "Second parameter : $2"
echo "all parameter : $*"
echo "all parameter : $@"
echo "num of parameter : $#"

일반적으로 $* 와 $@ 명령어는 같지만, for문을 사용할 시 "$*" 와 "$@" 처럼 큰 따옴표로 감쌌을 경우 동작방식이 달라진다.
#!/bin/bash
for val in $* #$@ 로 사용해도 결과 같음
do
echo "value : $val"
done

for문과 $* 또는 $@ 을 사용했을 경우에는 위에서 볼 수 있듯이 스페이스바를 기준으로 파라미터를 인식하고 구분한다.
이제 "$*" 을 사용했을 때와 "$@" 를 사용했을 때 결과를 보자.
#!/bin/bash
for val in "$*"
do
echo "value : $val"
done

#!/bin/bash
for val in "$@"
do
echo "value : $val"
done

우선 "$*" 는 들어오는 파라미터를 모두 한줄의 문자열로 인식한다.
그러나 "$@" 는 기본적으로 스페이스바로 구분하고, 따옴표를 기준으로 또 구분한다. 한마디로 스페이스바를 포함하는 매개변수를 사용할 때 활용할 수 있겠다.
특수 매개변수
매개변수 | 설명 |
$$ | 현재 실행중인 명령어 또는 스크립트의 PID |
$? | 최근에 실행된 명령어, 함수, 스크립트의 종료 상태 |
$! | 최근에 실행한 백그라운드 명령의 PID |
$- | 현재 옵션 플래그 |
이 부분은 나중에 참고할려고 우선 작성해뒀다. $? 를 활용해서 이전의 상태값에 따라 분기를 나눌수도 있고, 필요에 의해 사용할 수 있는 매개변수들이다.
# 위 내용은 "처음배우는 쉘 스크립트" 를 공부하고 정리한 내용입니다.
'쉘 스크립트' 카테고리의 다른 글
[쉘 스크립트] for / while 문 (0) | 2023.10.09 |
---|---|
[쉘 스크립트] if문 / switch-case문 (0) | 2023.10.09 |
[쉘 스크립트] Syntax error: "(" unexpected 에러 (0) | 2023.10.08 |