주석과 코딩 스타일
코드는 컴퓨터가 실행하지만, 주석은 사람이 읽습니다. 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 -r은 readonly와 동일하게 동작합니다.
$ 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를 한 번 돌려보는 습관을 들이면 충분합니다.