iBetter Books
수정

주석과 코딩 스타일

코드는 컴퓨터가 실행하지만, 주석은 사람이 읽습니다. 6개월 뒤에 자신이 만든 스크립트를 다시 봤을 때 "이게 뭐하는 코드지?"라는 생각이 들지 않으려면 주석과 일관된 코딩 스타일이 필요합니다.

한 줄 주석

# 기호로 시작하는 줄은 주석입니다. Bash는 이 줄을 무시하고 넘어갑니다. 줄 중간에 쓸 수도 있습니다.

#!/bin/bash# 새 파일: scripts/comment_demo.sh# 이 스크립트는 주석 사용 방법을 보여줍니다user_name=$(whoami)    # 현재 로그인한 사용자명echo "사용자: ${user_name}"exit 0

주석을 쓸 때 "무엇을 하는지"보다 "왜 하는지"를 적는 것이 더 유용합니다. user_name=$(whoami)를 보면 무엇을 하는지는 코드에서 읽힙니다. "왜 whoami를 쓰는지"가 설명이 필요한 부분입니다.

여러 줄 주석

여러 줄을 주석 처리할 때 매 줄마다 #을 붙여도 됩니다. Bash에는 C언어의 /* */ 같은 블록 주석이 없습니다. 대신 here-document를 활용하는 방법이 있습니다.

: << 'COMMENT'이 블록 안의 내용은 실행되지 않습니다.여러 줄을 한꺼번에 주석 처리할 때 사용합니다.개발 중에 코드 블록을 임시로 비활성화할 때 편리합니다.COMMENT

: 명령어는 "아무것도 하지 않는다"는 의미입니다. << 'COMMENT'COMMENT가 나올 때까지의 내용을 : 명령어의 입력으로 전달합니다. 결과적으로 그 내용은 무시됩니다.

일반적인 코드 비활성화에는 매 줄 #을 붙이는 방식이 더 명확합니다. here-document 방식은 긴 설명 텍스트나 사용법 안내를 스크립트 안에 넣을 때 유용합니다.

Google Shell Style Guide 핵심 규칙

코딩 스타일에 대한 여러 가이드라인이 있는데, Google Shell Style Guide가 업계에서 널리 참조됩니다. 핵심만 요약해서 살펴봅니다.

들여쓰기: 공백 2칸

# 올바른 들여쓰기if [[ -f "${file}" ]]; then  echo "파일이 존재합니다"    # 공백 2칸fi# 4칸도 틀리지 않지만, 2칸이 Shell Style Guide 권장

탭 대신 공백 2칸을 사용합니다. 에디터에서 탭을 공백으로 변환하도록 설정해두면 편합니다.

변수명: 소문자와 밑줄 (snake_case)

# 올바른 변수명user_name="ibetter"log_file="/var/log/app.log"max_retry_count=3# 피해야 할 변수명UserName="ibetter"       # CamelCase 지양LOGFILE="/var/log/app.log"  # 상수가 아닌데 대문자 사용

일반 변수는 소문자와 밑줄로 씁니다.

상수: 대문자 (readonly, declare -r)

readonly MAX_CONNECTIONS=100readonly LOG_DIR="/var/log/myapp"declare -r CONFIG_FILE="/etc/myapp.conf"

readonly로 선언하면 나중에 값을 바꾸려 할 때 오류가 납니다. 실수로 상수를 덮어쓰는 것을 방지합니다. declare -rreadonly와 동일하게 동작합니다.

$ readonly PI=3.14$ PI=3.15bash: PI: readonly variable

함수명: 소문자와 밑줄

print_usage() {  echo "사용법: ${0} [옵션]"}check_file_exists() {  local file_path="${1}"  [[ -f "${file_path}" ]]}

함수는 PART 05에서 자세히 다루지만, 이름 짓는 규칙은 지금부터 익혀두면 좋습니다.

변수는 항상 큰따옴표로 감싸기

# 올바른 방식echo "${user_name}"rm "${file_path}"# 위험한 방식 (변수에 공백이 있으면 오류 발생)echo $user_namerm $file_path

변수 값에 공백이 포함되어 있으면 따옴표 없이 쓸 경우 예상치 못한 분리가 일어납니다. ${file} 형식(중괄호 포함)이 권장됩니다.

ShellCheck 소개

스타일 규칙을 모두 외워서 지키기는 쉽지 않습니다. ShellCheck는 Bash 스크립트의 문법 오류와 스타일 문제를 자동으로 찾아주는 정적 분석 도구입니다.

# ShellCheck 설치sudo apt install shellcheck# 사용 방법shellcheck scripts/greet.sh

문제가 없으면 아무 출력이 없습니다. 문제가 있으면 다음처럼 설명해줍니다.

In scripts/greet.sh line 8:
  echo $user_name
       ^--------^ SC2086 (info): Double quote to prevent globbing and word splitting.

Did you mean:
  echo "$user_name"

ShellCheck는 문제를 발견했을 때 코드 번호(SC2086)와 함께 이유를 설명하고 수정 방법까지 제안합니다. PART 11에서 ShellCheck를 활용한 견고한 스크립트 작성법을 자세히 다룹니다.

지금은 스크립트를 작성할 때마다 shellcheck를 한 번 돌려보는 습관을 들이면 충분합니다.