프로그래밍/Bash

[bash 쉘 스크립트] 스크립트 실행하기

Peter Ahn 2018. 6. 4. 23:34
반응형

 

개요

 

안녕하세요 피터입니다.

오늘은 Bash 쉘로 만들어진 프로그램(보통 스크립트-script라고 말합니다) 실행하는 방법을 설명드리겠습니다.

 

가장 기본적인 형태의 bash 스크립트는 여러개의 명령어를 나열한 것입니다.

그러면 명령어를 매번 하나하나 입력할 필요 없이 스크립트 파일을 실행하는 것으로 시간을 절약할 수 있습니다.

마치 windows의 배치(batch) 파일과 같죠.

 

좀 더 복잡한 스크립트를 만들기 위해서는 쉘 내부 지시자를 사용해야 하는데 그러기 위해서는 맨 첫줄에 #! 로 시작하는 매직 코드(magic code)가 필요합니다.

 

#! 두 바이트는 이 파일이 어떤 명령어 해석기의 집합인지 시스템에 알려주는 역할으르 합니다.

즉, 실행 가능한 스크립트라는 것을 나타내는 특별한 표시자인 것이죠.

#!/bin/sh
#!/bin/bash

#! 뒤에 나오는 경로는 스크립트의 명령어를 해석할 프로그램의 위치를 나타냅니다.

 

/bin/sh 으로 작성하게 되면 기본쉘(리눅스에서는 bash)로 동작을 하게 됩니다.

기본쉘이 본쉘인 다른 유닉스 계열의 OS 에서는 /bin/bash 로 해야 bash 에서 사용되는 내부 명령어들을 사용할 수 있습니다.

리눅스에서는 /bin/sh/bin/bash 를 호출하기 때문에 같은 결과가 됩니다.

 

스크립트 작성

간단하게 log file을 정리하는 스크립트를 작성해보겠습니다.
 

file: cleanup.sh

#!/bin/sh

print_usage()
{
  echo "Usage: $0 filename lines"
  exit 2
}

if [ -n "$1" ]; then
  logfile=$1
else
  print_usage
fi

if [ -n "$2" ]; then
  lines=$2
else
  lines=100
fi

tail -$lines $logfile > log.tmp
/bin/mv log.tmp $logfile

echo "Clean up success"

exit 0

 

명령어 인수(argument)로 파일명과 정리후 남길 라인수를 입력하면 파일을 정리하는 스크립트 입니다.

명령어 인수에 파일명을 입력하지 않으면 Usage를 출력합니다.

라인수를 입력하지 않으면 기본값으로 100줄만 남기도록 동작합니다.

 

tail 명령어는 지정된 라인만큼만 출력하는 명령어입니다.

이 명령어의 결과를 재지향(redirect) 하여 log.tmp 파일로 저장한 뒤

원본에 덮어써서 로그를 정리하는 것입니다.

[참고]

[Linux] tail 로 실시간 로그 보기

[Linux] 재지향(Redirection)에 대한 이해

 

스크립트 실행

자 그럼 스크립트를 실행해볼까요?

아래와 같이 입력하면 스크립트를 실행할 수 있습니다.

 

sh cleanup.sh

또는

bash cleanup.sh

 

그냥 파일명으로 실행을 하기 위해서는 파일에 실행권한이 필요합니다.

chmod 명령어를 통해 스크립트 파일에 권한을 부여할 수 있습니다.

 

[참고]

[Linux] chmod 로 파일 권한 변경하기

 
[root@peterdev sh]# ls -l
total 8
-rwxr-xr-x 1 root root  267 Jun  4 14:16 cleanup.sh

 

이렇게 실행권한이 부여된 상태에서 아래와 같이 실행할 수 있습니다.

[root@peterdev sh]# ./cleanup.sh
Usage: ./cleanup.sh filename lines

 

명령어 인수를 입력하지 않아서 Usage 가 출력되었군요.

스크립트를 작성할 때 사용자가 올바르게 사용할 수 있도록 이렇게 장치를 마련해놓는 것이 좋습니다.

[root@peterdev sh]# ./cleanup.sh /var/log/messages 50
Clean up success

파일명과 라인수를 입력하니 정상적으로 동작합니다.

 

 

 

-Peter의 우아한 프로그래밍

여러분의 공감과 댓글은 저에게 크나큰 힘이 됩니다. 오류 및 의견 주시면 감사하겠습니다.

 

참고

http://wiki.kldp.org/HOWTO/html/Adv-Bash-Scr-HOWTO/index.html

 

반응형