스크립트 작성 모범 사례와 린팅
코딩 규칙과 주석 작성법을 배우고 ShellCheck와 같은 도구를 사용해 깔끔하고 읽기 쉬우며 오류 없는 Bash 스크립트를 작성합니다.
스크립트 작성 모범 사례와 린팅은(는) CoddyKit의 무료 DevOps Bootcamp 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 DevOps Bootcamp 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. DevOps Bootcamp 강의에는 총 4개의 강의가 포함되어 있습니다.
스크립팅 모범 사례가 필요한 이유
Bash 스크립트는 강력하지만 좋은 습관이 없으면 이해하고 유지 관리하며 디버깅하기 어려워질 수 있습니다.
모범 사례는 깔끔하고 견고하며 읽기 쉬운 코드를 작성하는 데 도움이 되는 지침입니다. 모범 사례를 따르면 스크립트가 다음과 같이 개선됩니다.
- 더 읽기 쉬움: 자신과 다른 사람이 쉽게 읽을 수 있습니다.
- 더 쉽게 유지 관리 가능: 업데이트하거나 수정하기가 간단합니다.
- 오류 발생 가능성 감소: 흔한 실수를 방지합니다.
- 협업에 더 적합: 코드의 모양과 동작 방식을 표준화합니다.
명확성을 위한 주석 작성
주석은 코드가 무엇을 하는지뿐 아니라 왜 그렇게 하는지를 설명하는 데 꼭 필요합니다. 주석은 미래의 자신이나 다른 개발자를 위한 메모 역할을 합니다.
다음과 같은 경우에 주석을 사용하십시오.
- 스크립트의 전반적인 목적을 맨 위에 설명합니다.
- 복잡한 논리나 이해하기 어려운 부분을 설명합니다.
- 함수의 목적, 인수 및 반환 값을 문서화합니다.
#(해시) 기호로 주석을 시작하십시오.
#!/bin/bash
# This script demonstrates commenting best practices.
# Author: CoddyKit
# Date: 2023-10-27
# Function: greet_user
# Description: Prints a greeting message to the console.
# Arguments:
# $1 - The name of the user to greet.
greet_user() {
local name="$1" # Store the first argument in a local variable.
echo "Hello, ${name}!" # Output the greeting message.
}
# Main script execution starts here.
echo "Script execution started."
greet_user "CoddyKit Learner" # Call the function with a specific name.
echo "Script execution finished."명확한 이름 지정 규칙
의미 있는 이름을 사용하면 스크립트를 더 쉽게 이해할 수 있습니다. 일반적인 반복 횟수 변수(예: i 또는 j)가 아니라면 한 글자 변수는 피하십시오.
일반적인 규칙은 다음과 같습니다.
- 변수: 설명적인 이름을 사용하십시오(예:
user_name,log_file). 환경 변수나 전역 상수에는UPPERCASE를 사용하십시오. 로컬 스크립트 변수에는lowercase_with_underscores를 사용하십시오. - 함수:
lowercase_with_underscores를 사용하고, 대개 동사로 시작하십시오(예:process_data,check_status). - 스크립트:
lowercase_with_hyphens를 사용하십시오(예:backup-script.sh).
일관된 서식 및 들여쓰기
들여쓰기와 간격 같은 일관된 서식은 가독성을 크게 향상합니다. 문단 들여쓰기가 일정하지 않은 책을 읽는다고 상상해 보십시오!
핵심 사항은 다음과 같습니다.
- 들여쓰기에 공백 2칸 또는 4칸을 사용하십시오(탭은 사용하지 않는 것이 좋습니다).
- 줄을 짧게 유지하십시오(터미널에서는 80자 이내를 적절한 기준으로 삼을 수 있습니다).
- 빈 줄을 사용하여 코드의 논리적 블록을 구분하십시오.
- 관련 요소는 적절한 경우 정렬하십시오.
선택한 구체적인 스타일보다 일관성이 더 중요합니다.
견고성: 'set -u' (nounset)
set -u(또는 set -o nounset) 옵션은 오타나 실수로 설정 해제된 변수로 인해 발생하는 버그를 방지하는 데 매우 유용합니다. 스크립트가 값이 할당되지 않은 변수를 사용하려고 하면 set -u가 즉시 스크립트를 오류와 함께 종료합니다.
이를 통해 오류를 초기에 발견하고 스크립트 후반부의 예기치 않은 동작을 방지할 수 있습니다.
아래 코드를 실행해 보십시오. UNSET_NAME이 정의되지 않았기 때문에 조기에 종료되도록 작성되었습니다.
#!/bin/bash
# Demonstrating 'set -u' (nounset)
set -u # Exit if an unset variable is used
MY_GREETING="Hello"
echo "${MY_GREETING}, CoddyKit!"
# This variable is NOT set. With 'set -u', the script will exit here.
echo "Your name is: ${UNSET_NAME}"
echo "This line will NOT be reached if 'set -u' is active and UNSET_NAME is indeed unset."견고성: 'set -o pipefail'
명령을 파이프로 연결하면(예: cmd1 | cmd2 | cmd3) Bash는 일반적으로 파이프의 마지막 명령의 종료 상태만 보고합니다. 즉, cmd1이 실패하더라도 cmd2와 cmd3이 성공하면 파이프 전체가 성공으로 보고될 수 있습니다!
set -o pipefail은 이 동작을 변경합니다. 파이프의 어떤 명령이든 실패하여 0이 아닌 종료 상태를 반환하면 파이프 전체의 종료 상태도 해당 0이 아닌 상태가 됩니다.
따라서 초반 명령이 실패했을 때 즉시 알려 주므로 파이프라인의 안정성이 향상됩니다.
#!/bin/bash
# Demonstrating 'set -o pipefail'
set -o pipefail # Ensures pipe's exit status is the last non-zero command
echo "Running a failing command in a pipe:"
echo "---"
# 'false' command always fails (exit status 1).
# 'cat /dev/null' always succeeds (exit status 0).
# With 'set -o pipefail', the pipe's overall exit status will be 1 from 'false'.
false | cat /dev/null
# This line will only be reached if the pipe above succeeds.
echo "---"
echo "Script finished successfully (this line won't show if pipe failed with set -o pipefail)."ShellCheck 소개
모범 사례를 따르더라도 작은 문법 오류나 흔한 함정을 놓치기 쉽습니다. 이때 ShellCheck가 유용합니다!
ShellCheck는 셸 스크립트를 위한 정적 분석 도구(‘린터’)입니다. 스크립트를 읽고 다음과 같은 항목을 알려 줍니다.
- 문법 오류
- 초보자가 흔히 하는 실수
- 미묘한 의미상의 문제
- 서로 다른 셸 간의 이식성 문제
대개 더 자세한 설명으로 연결되는 링크와 함께 유용한 제안도 제공합니다.
ShellCheck 실제 사용: 잘못된 스크립트
몇 가지 흔한 문제가 있는 스크립트를 살펴보겠습니다. 이러한 문제는 스크립트를 즉시 충돌시키지 않을 수도 있지만, 좋지 않은 관행이거나 잠재적인 버그가 될 수 있습니다.
bad_script.sh로 저장된 다음 스크립트가 있다고 가정해 보십시오. 이 스크립트에서 ShellCheck를 실행하려면 shellcheck bad_script.sh라고 입력합니다.
ShellCheck를 실행하기 전에 문제를 찾아낼 수 있는지 확인해 보십시오!
#!/bin/bash
# A script with some common issues
MY_NAME=coddykit # Variable assignment needs no space, but quoting is good for values
echo "Hello $MY_NAME!" # Missing quotes around variable expansion
if [ $1 = "admin" ]; then # Missing quotes around $1
echo "Welcome, administrator."
fi
# A simple loop with potential issues
for file in *.txt; do # Unquoted glob could expand to multiple arguments
echo File: $file # Missing quotes around $file
doneShellCheck 경고 수정
ShellCheck는 다음과 같은 출력을 제공합니다: SC2086: Double quotes missing around "$MY_NAME". 자세한 내용을 확인할 수 있도록 SC2086과 같은 구체적인 코드를 알려 주는 경우가 많습니다.
다음은 ShellCheck의 권장 사항과 일반적인 모범 사례에 따라 수정한 이전 스크립트입니다.
단어 분할과 글로빙을 방지하기 위해 변수 확장과 명령 치환을 ""로 감싼 점에 주목하십시오. 이러한 문제는 버그의 흔한 원인입니다.
#!/bin/bash
# A script with issues fixed by ShellCheck
MY_NAME="CoddyKit" # Quote variable assignment values
echo "Hello ${MY_NAME}!" # Always quote variable expansions
if [ "$1" = "admin" ]; then # Quote positional parameters like $1
echo "Welcome, administrator."
fi
# A simple loop with corrected quoting
for file in *.txt; do
echo "File: ${file}" # Quote variable expansions, especially in loops
done모범 사례 확인
다음 중 Bash 스크립트를 작성할 때 좋은 방식으로 간주되는 것은 무엇입니까?
복습: 전문적인 스크립트 작성
축하합니다! 이제 Bash 스크립트를 단순히 작동하는 수준에서 전문적인 수준으로 끌어올리는 방법을 배웠습니다.
다음 내용을 다뤘습니다.
- 가독성과 유지 관리성을 높이는 모범 사례의 중요성
- 명확성을 높이는 주석과 이름 지정 규칙 사용
set -u와set -o pipefail로 스크립트를 견고하게 만들기- 문제를 자동으로 찾고 코드를 개선하는 ShellCheck의 강력한 기능
이러한 원칙을 적용하면 더 안정적이고 이해하기 쉬우며 협업하기 좋은 Bash 스크립트를 작성할 수 있습니다. 계속 연습해 보십시오!
자주 묻는 질문
“스크립트 작성 모범 사례와 린팅” 강의는 무료인가요?
네 — “스크립트 작성 모범 사례와 린팅” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 DevOps Bootcamp 강의 전체를 잠금 해제할 수 있습니다. DevOps Bootcamp 강의에는 총 4개의 강의가 포함되어 있습니다.
“스크립트 작성 모범 사례와 린팅”에서 뭘 배우나요?
코딩 규칙과 주석 작성법을 배우고 ShellCheck와 같은 도구를 사용해 깔끔하고 읽기 쉬우며 오류 없는 Bash 스크립트를 작성합니다. 브라우저에서 직접 실행하는 실습 코드로 DevOps Bootcamp을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
DevOps Bootcamp을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 DevOps Bootcamp은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“스크립트 작성 모범 사례와 린팅” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 DevOps Bootcamp 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 DevOps Bootcamp 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- Bash 스크립트 디버깅(set -x, trap)
- 오류 처리와 종료 상태
- 스크립트 작성 모범 사례와 린팅
- Bats로 Bash 스크립트 테스트하기