코드에 주석을 다세요. 주석을 달면 다른 사람이 이해하거나 인식하기 쉽게 해 주고, 여러분이 그 스크립트를 관리하기 편하게 해 줍니다.
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] | 이 문맥에서 쓰인 "매직 넘버"는 파일 타입을 지정하기 위한 매직 넘버와 전혀 다른 뜻으로 쓰이고 있습니다. |