본문 바로가기
컴퓨터공학기초 개념/시스템 프로그래밍

29. 쉘 스크립트 - 이해와 변수

by devraphy 2021. 9. 23.

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[@]

출력결과

 

댓글