Wednesday, March 13, 2019

Bash 쉘 프로그래밍 - 2. 쉘 스크립트(Shell Script)의 구조 #1 .구조

안녕하세요. 썬구루입니다. 이 게시물에서 쉘 스크립트(Shell Script)의 구조(Structure)에 대해 알아보도록 하겠습니다.​

■ 쉘 스크립트 (Shell Script) 구조

쉘 스크립트 파일 내용은 기본적으로 아래와 같은 구조를 가집니다.

#!인터프리터(Interpreter)
#
# 주석(Comment)
#

함수명() {
  명령
  ...
}

명령1... (Command)
명령2...
명령3...

흐름제어 (Flow Control)

# 주석

함수호출

쉘 스크립트에서 주석 기호는 # 입니다. 한 줄 주석을 의미하며 # 기호 뒤에 따라오는 내용은 주석으로 처리합니다. 아래 내용을 쉘 스크립트 파일에 넣어 두면 # 기호는 주석이기 때문에 # 앞에 있는 명령만 쉘(Shell)에 의해 처리됩니다.

xfsdump -L "" -M "" -l 0 -f  /backup/boot_xfsdump_20170221.dmp /boot  # boot 파일시스템 백업

■ 첫 줄 #! (Shebang) 의미

하지만 첫 줄의 의미는 다릅니다. 첫 줄의 #! 를 Shebang 이라 하는데... 발음에 조심하셔야 할 듯.. 시방, 쉬방, 씨뱅 아님... 셔뱅이라고 읽는데 그 뒤에 스크립트를 처리할 인터프리터를 정의할 수 있습니다.

#!/bin/sh       <= 스크립트 내용을 본 쉘 ( Bourne Shell )로 처리
#!/bin/csh      <= 스크립트 내용을 씨 쉘 ( C Shell )로 처리
#!/bin/ksh      <= 스크립트 내용을 콘 쉘 ( Korn Shell )로 처리
#!/bin/bash     <= 스크립트 내용을 배시 쉘 ( Bash Shell )로 처리
#!/usr/bin/perl <= 스크립트 내용을 펄 ( Perl )로 처리
#!/usr/bin/python <= 스크립트 내용을 파이썬 ( Python )으로 처리

펄 ( Perl ) 로 처리하라고 하면 스크립트 내용이 펄 언어로 되어 있을 것이고 파이썬 ( Python ) 으로 처리하라고 하면 스크립트 내용은 파이썬 언어로 되어 있습니다. 저희는 당연 #!/bin/bash 를 사용할 것이죠.

■ # 주석 (Comments) 사용법

# 기호 주석 사용법은 초반에 쉘 스크립트의 목적와 쉘 스크립트 개발자 정보를 넣고 중간 중간에 기능에 대한 설명을 넣습니다. 예를 들면 아래와 같습니다.

#!/bin/bash
#
# 사용자로 부터 나이 입력을 받아 성인/미성년자 판단하는 스크립트
#
# 작성자 : 썬구루
# Blog : http://sunguru-infra.blogspot.com
#

# 사용자로 부터 나이 입력 받기

echo -n "How old are you : "
read AGE

# 입력 받은 나이에 대한 결과 처리

if [ $AGE -gt 18 ]; then
 echo "나이 $AGE.  성인입니다."
else
 echo "나이 $AGE. 미성년자입니다."
fi

중간 중간에 주석을 넣는 이유는 누가 보더라도 쉽게 이해하도록 만들기 위함입니다. 자기 자신에게 조차도요. 처음에는 한껏 필 받아서 열심히 짜고 만든 쉘 스크립트 파일이 잘 동작되는 것을 확인했는데 보름정도 있다가 쉘 소스 코드 ( Shell Source Code )를 보면 어떻게 코딩 ( Coding ) 했는지 자신이 만든 것이 맞는지 고개를 갸우뚱 하는 경우가 있습니다.

주석 기호를 사용하여 설명문을 넣어 그런 일이 발생하지 않도록 사전에 방지하는 효과도 있습니다.

■ 스크립트 내에 함수와 흐름제어를 꼭 사용해야 하나요?

쉘 프로그래밍 ( Shell Programming )을 매우 어렵게 생각하는 경우가 있는데 단순히 스크립트 파일 내용에 한 줄만 들어가도 됩니다. 함수, 흐름제어, 변수 선언 같은 것을 꼭 사용하지 않아도 반복적으로 실행하는 여러 개의 명령이 있다면 스크립트 내용에 사용하는 명령만 나열하여도 무방합니다.

#!/bin/bash
#
# /boot XFS 파일시스템 백업
#

xfsdump -L "" -M "" -l 0 -f  /backup/boot_xfsdump_`date +%Y%m%d`.dmp /boot  # boot 파일시스템 백업

위 내용처럼 /boot 파일시스템 백업을 위한 명령 한 줄만 적어도 쉘 프로그래밍을 한 것이죠. 쉘 프로그래밍에 대해 어렵다거나 너무 거창하게 생각 안 하셔도 됩니다.

■ 쉘 프로그램(Shell Program)을 잘 만드려면 어떻게 해야 하나요?

쉘 프로그램을 만드는 이유는 리눅스 또는 유닉스 시스템 관리를 편하게 하기 위함입니다. 하나의 작업을 위해 20개의 명령을 쳐야한다면 매번 20개의 명령을 치는 것이 아닌 쉘 스크립트 파일 내에 20개의 명령을 입력하고 작업이 있을 때마다 쉘 스크립트 파일을 한 번 실행 시키는 것이죠. 그럼 매번 20개의 명령의 실행할 필요없이 하나의 쉘 스크립트 파일을 한 번만 실행하면 되니까 작업의 효율성이 높아지는 것입니다.

그래서 쉘 프로그램을 잘 만들기 위해선 리눅스 또는 유닉스 명령을 많이 알고 있는 것이 중요합니다. 단순히 1부터 100까지의 합을 구하기 위해 쉘 프로그래밍을 하는 것은 아니거든요. 일주일에 한번씩 실행해야 하는 10개의 명령이 있다면 쉘 스크립트 파일을 만들고 cron으로 스케줄링을 하는 것이죠.

쉘 프로그래밍은 리눅스, 유닉스 관리자 또는 엔지니어에게는 꼭 필요한 기술입니다. 손 발의 수고를 덜기 위해서요. ^^


No comments:

Post a Comment