System Admin

본문 바로가기
사이트 내 전체검색


RedHat Linux >> System Administration for Redhat Linux
[목차]
제2장 쉘 프로그래밍

    13. 셸 스크립트 분석


먼저 가장 많이 접하게 되는 profile을 분석해 봅시다.

실행가능한 프로그램의 경로를 지정함으로써, 실행을 좀더 편리하게 할 수 있도록 합니다.

PATH는 dos에서의 PATH와 같다고 보면 가장 정확할 것입니다.

PATH="$PATH:/usr/X11R6/bin"

이것은 명령 프롬프트를 지정하는 것입니다.

PS1= "[\u@\h \w]\\$"

사용자의 id를 지정하는 것입니다.

USER=`id -un`
LOGNAME=$USER

사용자의 메일 폴더를 지정하는 것입니다.

MAIL="/var/spool/mail/$USER"

이와 같이 정의된 내용을 외부로 알려야 하는데 이러한 기능을 'export'라는 키워드를 사용하여 할 수 있습니다.

export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE INPUTRC

반대로 export로 알려진 변수를 없애려면 unset을 사용하면 됩니다.

그 밖의 환경 설정은 일일이 /etc/profile.d/라는 디렉토리에 넣으면 자동으로 가능하게 할 수 있습니다.

for i in /etc/profile.d/*.sh ; do
        if [ -x $i ]; then
                . $i
        fi
done

 

unset i분석해 보면 우선 /etc/profile.d/에서 확장자가 sh 로 끝나는 파일을 모두 찾아서 i 라는 변수에 정의된 파일을 실행할 수 있다면(if의 -x 옵션) 이를 실행하며, 그렇지 않으면 profile에서 읽어 들여(source 명령은 스크립트를 현재 스크립트에 합치는 기능을 합니다) 처리합니다.

마지막 줄을 보면 unset이라는 명령이 있습니다. 이 명령은 정의된 환경 변수를 해제하는 기능을 하는데 여기에서는 i 라는 변수를 제거합니다. 'unset path'라는 명령을 사용한다면 여러분은 외부 명령을 수행할 수 없게 될 것입니다.

이번에는 여러분한테 도움이 될 만한 몇 가지 셸 스크립트를 소개하고자 합니다.

먼저 color s에 대한 셸 스크립트입니다.

# color-ls initialization
COLORS=/etc/DIR_COLORS
eval `dircolors --sh /etc/DIR_COLORS`
[ -f "$HOME/.dircolors" ] && eval `dircolors --sh $HOME/.dircolors` && COLORS=$H
OME/.dircolors


if echo $SHELL |grep bash 2>&1 >/dev/null; then # aliases are bash only
  if ! egrep -qi "^COLOR.*none" $COLORS &>/dev/null; then
        alias ll='ls -l --color=tty'
        alias l.='ls -d .[a-zA-Z]* --color=tty'
        alias ls='ls --color=tty --show-control-char'
  else
        alias ll='ls -l'
        alias l.='ls -d .[a-zA-Z]*'
  fi
fi

앞의 내용을 /etc/profile.d/color-ls.sh 로 저장한 다음, 새로운 셸을 열면 color로 표시되는 ls를 볼 수 있을 것입니다.

여기서 새로운 명령을 볼 수 있습니다. 첫 번째로 'alias'는 가상적인 명령어를 만드는 것으로 ls 명령은 이후에 /bin/ls $ls_options로 수행됩니다.

두 번째로 'eval dircolors -b'는 color ls 환경 변수를 설정하는 것입니다.

리눅스에 한글을 사용하려면 다음과 같은 내용을 환경 변수에 정의해야 합니다. 나중에 il8n이라는 것에 대해 알아볼텐데 이때 다음 내용이 환경 변수에 정의되어 있어야 합니다.

export perl_badlang=0

export LANG=ko

앞의 내용을 /etc/profile.d/korean-basic.sh 로 저장한 다음 새로운 셸을 열면 환경 변수가 설정되어 LANG 변수를 참조하는 프로그램에서 한글 처리가 가능해집니다.

여기서 첫 번째에 사용된 perl_badlang는 perl을 사용할 때 LANG가 'c' 형태가 아니면 경고 메시지를 출력하는데 이를 출력하지 못하게 하는 옵션입니다.

마지막으로 실행 스크립트를 하나 봅시다.

#!/bin/sh

which=""

if echo $0 | grep 'navigator' >/dev/null; then

which=netscape-navigator

elif echo $0 | grep 'communicator' >/dev/null; then

which=netscape-communicator

fi

if [ -z $which ]; then

if rpm -q netscape-communicator >/dev/null 2>&1; then

which=netscape-communicator

elif rpm -q netscape-navigator >/dev/null 2>&1; then

which=netscape-navigator

else

echo "you don't have netscape installed." >&2

fi

fi

if ! rpm -q $which >/dev/null 2>&1; then

echo "you don't have $which installed." >&2

exit 1

fi

i="`rpm -q $which --qf '%{installprefix}\n' `"

if [ "$i"="(none)" ]; then

i=/usr

fi

if [ -f $i/lib/netscape/gnumalloc.glibc.so ]; then

export ld_preload=$i/lib/netscape/gnumalloc.glibc.so

fi

if [ -x $i/lib/netscape/$which ]; then

if [ -d $i/lib/netscape/tclplug ]; then

export tcl_plugin_dir=$i/lib/netscape/tclplug

fi

export ld_preload=$i/lib/netscape/gnumalloc.glibc.so

if [ -z "$*" ]; then

exec $i/lib/netscape/$which /usr/doc/html/index.html

else

exec $i/lib/netscape/$which $*

fi

fi

echo "an error occurred running and $i/lib/netscape/$which."

앞의 내용을 보면 알겠지만 넷스케이프를 실행하기 위한 스크립트입니다. 이 스크립트를 분석해 보면 많은 부분에서 많은 부분에서 도움을 얻을 수 있습니다. 여기서 몇 가지 중요한 환경 변수에 대해서 설명하겠습니다.

export ld_preload=$i/lib/netscape/gnumalloc.glibc.so

이 부분은 동적 라이브러리에 관련된 부분인데 리눅스에서는 동적 라이브러리의 위치가 /etc/ld.so.conf에 등록되어 있습니다. 그러나 위 환경 변수를 사용함으로써 /etc/ld.so.conf에 존재하는 동적 라이브러리 보다 우선적으로 처리하도록 하는 기능을 갖게 합니다.

이외에 'exec'라는 명령이 있는데 이 명령은 외부 프로그램을 수행하라는 뜻으로 일반적으로 수행되는 명령과는 차이가 있습니다. 다음과 같이 수행된다면 /bin/netscape의 수행 후 넷스케이프를 종료하면 다시 스크립트로 되돌아오지 않고 바로 프로그램을 종료합니다.

exec /bin/netscape $*

반대로 다음과 같이 수행하면 넷스케이프 수행 후 넷스케이프를 종료하면 실행하던 스크립트로 다시 돌아와 다음 문장을 계속 수행하게 됩니다.

/bin/netscape $*

지금까지 셸 스크립트에 대해 알아보았습니다. 셸 스크립트에 대해 더 공부하고자 한다면 관련 서적이나 도큐먼트 문서를 참고하기 바랍니다.

 

[목차]

개인정보취급방침 서비스이용약관 모바일 버전으로 보기 상단으로

TEL. 063-469-4551 FAX. 063-469-4560 전북 군산시 대학로 558
군산대학교 컴퓨터정보공학과

Copyright © www.leelab.co.kr. All rights reserved.