코드에 주석을 다세요. 주석을 달면 다른 사람이 이해하거나 인식하기 쉽게 해 주고, 여러분이 그 스크립트를 관리하기 편하게 해 줍니다.
PASS="$PASS${MATRIX:$(($RANDOM%${#MATRIX})):1}"
# 여러분이 작년에 이걸 짰을 때는 아주 완벽하게 이해를 했겠지만 지금은 완전히 수수께끼입니다.
# (Antek Sawicki 의 "pw.sh" 스크립트에서 인용) |
스크립트와 함수에 간단한 설명을 담고 있는 헤더를 추가하세요.
#!/bin/bash
#************************************************#
# xyz.sh
# written by Bozo Bozeman
# July 05, 2001
# 프로젝트 파일들 정리하기.
#************************************************#
BADDIR=65 # 존재 하지 않는 디렉토리.
projectdir=/home/bozo/projects # 정리할 디렉토리.
#-------------------------------------------------------#
# cleanup_pfiles ()
# 지정된 디렉토리에 들어 있는 모든 파일을 지움.
# 매개변수: $target_directory
# 리턴: 성공시 0, 잘못되면 $BADDIR.
#-------------------------------------------------------#
cleanup_pfiles ()
{
if [ ! -d "$1" ] # 해당 디렉토리가 존재하는 확인.
then
echo "$1 는 디렉토리가 아닙니다."
return $BADDIR
fi
rm -f "$1"/*
return 0 # 성공.
}
cleanup_pfiles $projectdir
exit 0 |
"매직 넘버" [1] ("고정된", hard-wired 문자 상수) 쓰지 않기. 그 대신 의미 있는 변수 이름을 쓰기 바랍니다. 이렇게 하면 스크립트를 이해하기 쉽고, 변경 가능하면서 추가적인 분석 없이도 업데이트가 가능하게 합니다.
if [ -f /var/log/messages ] then ... fi # 일년후, 이 스크립트가 /var/log/syslog 를 확인하도록 변경하려고 합니다. # 이 부분이 나오는 곳을 손으로 일일이 다 찾아서 바꿔줘야 합니다. # 그리고 잘못되지 않기를 바래야 합니다. # 더 좋은 방법: LOGFILE=/var/log/messages # 여기만 변경하면 됩니다. if [ -f $LOGFILE ] then ... fi |
서술적인 변수명을 고르세요.
fl=`ls -al $dirname` # 암호같죠?
file_listing=`ls -al $dirname` # 훨씬 좋네요.
MAXVAL=10 # 스크립트 상수로 쓰이는 변수명은 모두 대문자로 쓰세요.
while [ "$index" -le "$MAXVAL" ]
...
E_NOTFOUND=75 # 에러 코드용 변수는 "E_"로 시작하고
# 모두 대문자로.
if [ ! -e "$filename" ]
then
echo "$filename 을 찾을 수 없습니다."
exit $E_NOTFOUND
fi
MAIL_DIRECTORY=/var/spool/mail/bozo # 환경 변수에는 모두 대문자.
export MAIL_DIRECTORY
GetAnswer () # 함수명에는 대소문자를 섞어 쓰면 좋습니다.
{
prompt=$1
echo -n $prompt
read answer
return $answer
}
GetAnswer "제일 좋아하는 숫자는? "
favorite_number=$?
echo $favorite_number
_uservariable=23 # 가능하지만 추천하지 않습니다.
# 사용자용 변수는 밑줄로 시작하지 않는 것이 좋습니다.
# 밑줄로 시작하는 변수는 시스템용으로 남겨 두기 바랍니다. |
조직적이고 의미 있는 종료 코드를 쓰세요.
E_WRONG_ARGS=65 ... ... exit $E_WRONG_ARGS |
복잡한 스크립트를 간단한 모듈로 나누고, 적당한 곳에서 함수를 사용하세요. 예 35-3를 참고.
간단한 것으로 할 수 있는데 복잡하게 하지 마세요.
COMMAND if [ $? -eq 0 ] ... # 중복되고 직관적이지 않습니다. if COMMAND ... # 더 간단하죠(읽기 쉽지는 않을지 몰라도). |
| [1] | 이 문맥에서 쓰인 "매직 넘버"는 파일 타입을 지정하기 위한 매직 넘버와 전혀 다른 뜻으로 쓰이고 있습니다. |