0. 시작하기전에
- 쉘은 익히 알고있는대로, 사용자가 운영체제를 다루기 쉽도록 제공하는 인터페이스다.
- 이 쉘의 기본 명령어들과 몇가지 문법을 이용해서 프로그램을 만들 수 있다.
- 쉘 스크립트는 서버 작업의 자동화 및 운영(DevOps)를 위해 반드시 익혀두어야 하는 기술이다.
- 이번 포스팅에서는 쉘에서 사용하는 언어인, 쉘 스크립트에 대해서 알아볼 예정이다.
1. 쉘 스크립트란?
- 쉘 스크립트는 서버를 다루기위해 사용되는 언어다.
- 사용하는 쉘에 따라서 쉘 스크립트의 문법이 조금씩 다르다.
- 최근에는 Perl과 Python을 이용하여 서버를 관리하기도 하는데, 전통적으로 지금까지 사용되는 언어가 쉘 스크립트다.
a) 쉘 스크립트 활용예시
- 서버에 로그파일이 너무 쌓인 나머지, 서버에 남은 공간이 없어져 서버가 다운되는 경우가 있다.
- 이처럼 로그파일의 업데이트가 주기적으로 실행되지 않은 실수로 인해 문제가 발생할 수 있다.
- 이는 서버의 로그파일을 주기적으로 삭제해주는 프로그램을 쉘 스크립트로 작성하여 해결할 수 있다.
2. 쉘 스크립트의 기본문법
- 쉘 스크립트는 파일로 작성 후, 파일을 실행한다.
- 일반적으로 파일이름.sh의 파일형태를 가진 이름으로 생성한다.
- 파일의 가장 첫번째 줄은 #!/bin/bash 로 작성하여 쉘 스크립트 파일로 명시한다.
- 쉘 스크립트 파일은 실행권한을 가져야 실행할 수 있다.
- 쉘 스크립트는 주석(#)을 이용하여 기능에 대한 설명을 적어놓는다.
a) 실습예제1
- bash 쉘에서 제공하는 echo함수를 이용하여 화면에 "Hello, World!"를 출력해보자.
#!/bin/bash
echo 'Hello, World!'
- 파일을 생성하여 위의 쉘 스크립트를 작성한다.
* echo는 print의 기능을 하는 명령어다.
- 현재 생성한 쉘 스크립트파일은 실행권한이 없는 상태이다.
- 그러므로 chmod를 이용하여 실행권한을 부여한다.
- 따로 컴파일 과정을 거치지 않고, 해당 파일을 실행하면 위의 사진처럼 출력되는 것을 확인할 수 있다.
b) 프로그래밍이 가능하다는 의미
- 쉘 스크립트를 이용하여 프로그램 작성이 가능하다. 즉, 프로그래밍이 가능하다.
- 프로그래밍이 가능하다는 의미는 변수, 조건문, 반복문을 사용할 수 있다는 것이다.
3. 쉘 스크립트의 변수
a) 변수의 선언
- 따로 자료형을 선언하지 않고 변수명과 데이터를 매핑하는 방식을 사용한다.
- 더불어, 띄어쓰기는 허용되지 않으니 주의하자.
변수명=데이터
#변수명 = 데이터 이런 방식의 띄어쓰기는 허용되지 않는다.
b) 변수의 사용
- 변수를 사용할 때에는 달러($)표시를 변수명과 함께 사용하면 된다.
$변수명
c) 실습예제
- 이름, 나이, 취미를 변수로 만들어서 출력해보는 프로그램을 만들어보자.
#!/bin/bash
name=devRaphy
age=10
hobby=programming
echo $name,$age,$hobby # 이렇게도 출력이 되는지 궁금해서 시도해보았다.
echo $age
echo $hobby
* chmod를 통해서 실행권한을 부여하는 것을 까먹지 말자. 필자도 까먹어서 오류메세지가 받았다.
d) 실습예제 정답코드
#!/bin/bash
name='devRaphy'
age=10
hobby='programming'
echo $name $age $hobby
echo $age
echo $hobby
- 작성하고보니 문자열을 문자열로 표현해야 한다는 부분을 간과하였다.
- 문자열을 따옴표를 이용하여 표시하도록하자. 그렇게 하면 읽는 사람의 입장에서 더욱 편할 것이다.
- 더불어 연속적으로 변수를 출력할 때에는 콤마를 사용하지 않고 띄어쓰기로 구분할 수 있다.
3. 쉘 스크립트의 리스트(배열) 변수
- 다른 언어에서 이미 사용해봤을 리스트 또는 배열을 쉘 스크립트에서도 지원한다.
- 다음과 같이 사용할 수 있다.
a) 실습예제
- 과일 이름을 담는 배열을 만들어보고, 위의 명령어를 사용해보자.
#!/bin/bash
fruits=('apple' 'banana' 'lemon')
# index를 사용하여 출력하는 방법
echo ${fruits[0]} ${fruits[1]} ${fruits[2]}
# 모든 데이터를 출력하는 방법
echo ${fruits[@]}
echo ${fruits[*]}
# 배열의 크기를 출력하는 방법
echo ${#fruits[@]}
# 현재 디렉토리의 파일 리스트를 배열 변수로 만드는 방법
filelist=( $(ls) )
echo ${filelist[*]}
b) 왜 배열변수는 대괄호를 사용할까?
- 한가지 궁금한 점이 생겼다. 왜 배열변수는 대괄호{}를 반드시 사용해서 표현해야 하는걸까?
- 만약 대괄호를 사용하지 않는다면 fruits라는 단어를 배열변수가 아니라 일반변수로 인지한다.
- 그러므로 배열변수를 배열로써 사용하기 위해서는 대괄호를 사용해야 하는 것이다.
#!/bin/bash
fruits=('apple' 'banana' 'lemon')
echo $fruits[1] $fruits[@]
'컴퓨터공학기초 개념 > 시스템 프로그래밍' 카테고리의 다른 글
31. 쉘 스크립트 - 조건문과 반복문 (0) | 2021.09.24 |
---|---|
30. 쉘 스크립트 - 조건문 (0) | 2021.09.24 |
28. 시그널 - 사용법 이해 (0) | 2021.09.21 |
27. 프로세스 - IPC 기법(shared memory) (0) | 2021.09.21 |
26. 프로세스 - IPC 기법(pipe, message queue) (0) | 2021.09.17 |
댓글