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