Computer >> 컴퓨터 >  >> 프로그래밍 >> Bash 프로그래밍

리눅스에서 효과적인 Bash 스크립트 작성을 위한 10가지 유용한 팁

셸 스크립팅은 리눅스에서 배울 수 있는 가장 쉬운 프로그래밍 형태입니다. 동시에 시스템 관리 업무에서 반복 작업 자동화나 간단한 유틸리티·도구 개발 등에 반드시 필요한 핵심 기술이기도 합니다.

이 글에서는 효과적이고 안정적인 Bash 스크립트를 작성하기 위한 10가지 실용적인 팁을 소개합니다.

1. 스크립트에는 항상 주석을 달기

주석 작성은 셸 스크립팅뿐 아니라 모든 프로그래밍에서 권장되는 기본 관행입니다. 스크립트에 주석을 남겨두면 나중에 본인이나 다른 사람이 코드를 검토할 때 각 부분의 역할을 쉽게 파악할 수 있습니다.

주석은 # 기호로 정의합니다.

#TecMint는 다양한 리눅스 관련 글을 제공하는 최고의 사이트입니다

2. 명령이 실패하면 스크립트를 종료하기

Bash는 특정 명령이 실패해도 스크립트 실행을 계속 진행하는 경우가 있습니다. 이렇게 되면 이후 코드 전체에 영향을 미쳐 논리 오류로 이어질 수 있습니다. 아래 설정을 추가하면 명령이 실패하는 즉시 스크립트를 종료할 수 있습니다:

#명령이 실패하면 스크립트 종료
set -o errexit
또는
set -e

3. 선언되지 않은 변수를 사용하면 스크립트를 종료하기

Bash는 선언되지 않은 변수를 사용하려 할 수도 있는데, 이 역시 논리 오류의 원인이 됩니다. 아래 설정을 사용하면 선언되지 않은 변수를 참조하는 순간 스크립트가 종료됩니다:

#선언되지 않은 변수를 사용하면 스크립트 종료
set -o nounset
또는
set -u

4. 변수를 참조할 때는 큰따옴표 사용하기

변수 값을 참조할 때 큰따옴표로 감싸면 단어 분리(word splitting, 공백 기준 분리)와 불필요한 글로빙(globbing, 와일드카드 인식 및 확장)을 방지할 수 있습니다.

다음 예제를 확인해 보세요:

#!/bin/bash
#명령이 실패하면 스크립트 종료
set -o errexit

#선언되지 않은 변수를 사용하면 스크립트 종료
set -o nounset

echo "큰따옴표 없이 출력"
echo
names="Tecmint FOSSMint Linusay"
for name in $names; do
        echo "$name"
done
echo

echo "큰따옴표로 출력"
echo
for name in "$names"; do
        echo "$name"
done

exit 0

파일을 저장하고 종료한 뒤 아래와 같이 실행합니다:

$ ./names.sh
리눅스에서 효과적인 Bash 스크립트 작성을 위한 10가지 유용한 팁

5. 스크립트에서 함수를 활용하기

아주 짧은 스크립트(몇 줄 정도의 코드)가 아니라면 함수를 사용해 코드를 모듈화하고, 가독성과 재사용성을 높이는 것이 좋습니다.

함수 작성 문법은 다음과 같습니다:

function check_root(){
	command1;
	command2;
}

또는
check_root(){
	command1;
	command2;
}

한 줄로 작성할 때는 각 명령 뒤에 세미콜론 같은 종결 문자를 붙여 다음과 같이 표현합니다:

check_root(){ command1; command2; }

6. 문자열 비교에는 == 대신 = 사용하기

===의 동의어이지만, 문자열 비교 시에는 하나의 =만 사용하는 것이 좋습니다. 예를 들어:

value1="tecmint.com"
value2="fossmint.com"
if [ "$value1" = "$value2" ]

7. 명령 치환에는 백틱 대신 $(command) 사용하기

명령 치환(command substitution)은 명령을 그 실행 결과값으로 대체하는 기능입니다. 구식 백틱 `command` 대신 $(command) 형식을 사용하세요.

셸 스크립트의 경고와 개선 제안을 보여주는 shellcheck 도구 역시 이 방식을 권장합니다. 예를 들어:

user=`echo "$UID"`
user=$(echo "$UID")

8. 상수 변수 선언에는 readonly 사용하기

변경되지 않아야 하는 값은 readonly로 선언하면, 한 번 정의된 이후 스크립트 내에서 수정할 수 없습니다:

readonly passwd_file="/etc/passwd"
readonly group_file="/etc/group"

9. 환경 변수는 대문자, 사용자 정의 변수는 소문자로 작성하기

모든 Bash 환경 변수는 대문자로 명명됩니다. 따라서 직접 만드는 변수는 소문자로 이름을 지어 변수 이름 충돌을 피하는 것이 좋습니다:

#커스텀 변수는 소문자로, 환경 변수는 대문자로 정의
nikto_file="$HOME/Downloads/nikto-master/program/nikto.pl"
perl "$nikto_file" -h "$1"

10. 긴 스크립트는 반드시 디버깅하기

수천 줄에 달하는 Bash 스크립트를 작성하다 보면 오류를 찾는 일이 악몽처럼 느껴질 수 있습니다. 스크립트를 실행하기 전에 디버깅을 수행하면 문제를 훨씬 쉽게 해결할 수 있습니다. 아래 가이드를 통해 디버깅 방법을 익혀보세요:

  1. 리눅스에서 셸 스크립트 디버깅 모드 활성화하는 방법
  2. 셸 스크립트에서 문법 검사 디버깅 모드를 수행하는 방법
  3. 셸 추적(shell tracing)으로 셸 스크립트의 명령 실행 과정을 추적하는 방법

이상으로 10가지 팁을 마무리합니다. 함께 공유하고 싶은 다른 Bash 스크립팅 모범 사례가 있다면 아래 댓글로 알려주세요!