더북(TheBook)

이제 해당 셸 스크립트를 어느 디렉터리에서든지 실행할 수 있다.

shinjaehun@losttemple:~$ helloworld
Hello! Shell Script!

앞서 만들어본 셸 스크립트는 문자열 출력이 목적으로 그다지 유용한 예제는 아니었다. 이번에는 시스템 로그(syslog)를 모니터링하는 sysloger라는 셸 스크립트를 만들어보자.

shinjaehun@losttemple:~$ vi sysloger

/var/log/syslog를 tail로 확인한 결과를 ‘syslogresult’라는 파일에 저장하는 것 역시 단순한 스크립트이다. ‘>’는 표준 출력을 재지정한다. 명령 프롬프트에서 tail /var/log/syslog를 실행하면 표준 출력인 모니터로 결과가 출력된다. ‘>’를 이용해서 출력 방향을 다시 지정하여 명령 결과를 표준 출력이 아닌 ‘syslogresult’ 파일로 보낼 것이다.

#!/bin/bash
tail /var/log/syslog > syslogresult

적절한 실행 권한을 부여하고 스크립트를 실행시킨다. 명령 결과 syslogresult가 생성된 사실을 확인할 수 있을 것이다.

shinjaehun@losttemple:~$ sudo chmod +x sysloger
shinjaehun@losttemple:~$ ./sysloger
shinjaehun@losttemple:~$ cat syslogresult

셸 스크립트는 다른 프로그래밍 언어 못지않게 유연함과 강력함을 자랑한다. 자료를 저장하는 그릇, 변수를 사용해보자. sysloger 스크립트를 vi로 열어서 다음과 같이 작성한다. 변수에 값을 입력할 때는 대입 연산자인 ‘=’를 사용한다( result=syslogresult). 이때 연산자 다음에 공백이 있으면 안 되므로 주의해야 한다. 변수를 사용할 때는 변수 이름 앞에 $를 붙인다($result).

#!/bin/bash
result=syslogresult

tail /var/log/syslog > $result

사실 변수만 사용했을 뿐 tail 결과를 syslogresult에 저장한다는 사실은 변함없다.

shinjaehun@losttemple:~$ ./sysloger

좀 더 유용한 예제가 되도록 해보자. 옵션 없이 tail을 실행하면 10줄을 출력한다. 원하는 수만큼 출력하려면 -n 옵션을 사용해야 한다.

새로운 변수 $1은 커맨드라인에서 입력하는 스크립트의 인자를 저장하는 위치 매개변수이다. 명령 프롬프트에서 ./sysloger 5라고 입력한다면 $1에는 5가 저장되고 tail 명령은 tail /var/log/syslog -n5로 확장될 것이다.

#!/bin/bash
result=syslogresult

tail /var/log/syslog -n$1 > $result
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.