Linux Bash shell script

Bash Shell Script에서 자주 발생하는 실수와 해결 방법

임베디드 친구 2025. 2. 14. 10:07
728x90
반응형

Bash 스크립트는 Linux 환경에서 자동화를 구현하기 위한 강력한 도구입니다. 하지만 많은 개발자와 관리자들이 스크립트를 작성하면서 공통적으로 실수를 저지릅니다. 이 글에서는 Bash 스크립트를 작성할 때 자주 발생하는 실수와 이를 해결하는 방법을 다룹니다. 또한, 이해를 돕기 위한 예제 코드도 포함되어 있습니다.

1. 파일 시작에 #!/bin/bash를 누락

문제

Bash 스크립트의 첫 줄에 #!/bin/bash 또는 #!/usr/bin/env bash를 명시하지 않으면 스크립트가 의도한 셸 대신 기본 셸에서 실행될 수 있습니다.

해결 방법

스크립트의 첫 줄에 항상 적절한 셸을 명시하세요.

#!/bin/bash

# 예제 코드
echo "Hello, Bash!"

설명

#!/bin/bash는 해당 스크립트를 Bash 셸에서 실행하도록 지정합니다.


2. 변수 사용 시 $ 누락

문제

변수를 사용할 때 $를 누락하면 변수의 이름이 문자열로 처리됩니다.

잘못된 코드

#!/bin/bash
name="John"
echo "Hello, name!"  # 출력: Hello, name!

해결 방법

변수를 사용할 때는 항상 $를 붙이세요.

#!/bin/bash
name="John"
echo "Hello, $name!"  # 출력: Hello, John!

3. 변수에 값을 할당할 때 공백 사용

문제

변수 할당 시 등호(=) 양쪽에 공백이 있으면 구문 오류가 발생합니다.

잘못된 코드

#!/bin/bash
name = "John"  # 오류 발생

해결 방법

변수 할당 시 공백을 사용하지 마세요.

#!/bin/bash
name="John"
echo $name

4. 따옴표 처리 실수

문제

문자열을 처리할 때 따옴표를 적절히 사용하지 않으면 예기치 않은 결과가 발생할 수 있습니다.

잘못된 코드

#!/bin/bash
file=somefile.txt
rm $file  # 만약 파일명이 공백을 포함하면 오류 발생

해결 방법

변수를 사용할 때는 항상 따옴표로 감싸세요.

#!/bin/bash
file="some file.txt"
rm "$file"

5. 명령어 실행 결과를 변수에 할당할 때 $(...) 또는 백틱(```) 누락

문제

명령어 실행 결과를 변수에 저장할 때 적절한 구문을 사용하지 않으면 오류가 발생합니다.

잘못된 코드

#!/bin/bash
date_today=date  # 'date'라는 문자열이 변수에 저장됨
echo $date_today

해결 방법

명령어 실행 결과를 저장하려면 $(...) 또는 백틱(```)을 사용하세요.

#!/bin/bash
date_today=$(date)
echo $date_today

6. if 문 조건에서 대괄호 사용 실수

문제

if 조건에서 대괄호와 공백을 잘못 사용하면 구문 오류가 발생합니다.

잘못된 코드

#!/bin/bash
num=10
if [ $num -gt 5]  # 대괄호와 공백 문제
then
  echo "Number is greater than 5"
fi

해결 방법

대괄호와 조건 사이에 공백을 정확히 추가하세요.

#!/bin/bash
num=10
if [ $num -gt 5 ]; then
  echo "Number is greater than 5"
fi

7. for 루프에서 리스트 변수 사용 실수

문제

for 루프에서 변수 값을 처리할 때 따옴표를 누락하면 예상치 못한 동작이 발생할 수 있습니다.

잘못된 코드

#!/bin/bash
files="file1 file2 file3"
for file in $files; do  # 공백이 포함된 파일명을 제대로 처리하지 못함
  echo $file
done

해결 방법

변수를 따옴표로 감싸세요.

#!/bin/bash
files="file1 file2 file3"
for file in "$files"; do
  echo $file
done

8. exit 상태 코드 확인 누락

문제

스크립트에서 실행한 명령어가 실패했을 때 이를 확인하지 않으면 문제를 파악하기 어려워집니다.

해결 방법

명령어 실행 후 echo $?로 상태 코드를 확인하거나, set -e 옵션을 사용하세요.

#!/bin/bash
set -e  # 오류 발생 시 스크립트 종료
echo "Starting script"
nonexistent_command  # 이 명령어에서 스크립트 종료
echo "This will not be printed"

9. 상대 경로 사용 시 디렉토리 변경 문제

문제

스크립트 실행 중 작업 디렉토리를 변경하면 상대 경로가 꼬일 수 있습니다.

해결 방법

스크립트의 작업 디렉토리를 절대 경로로 지정하세요.

#!/bin/bash
cd $(dirname "$0")  # 스크립트 위치로 이동
absolute_path="$(pwd)/myfile.txt"
echo "Absolute path: $absolute_path"

10. trap을 사용하지 않아 리소스 누수 발생

문제

스크립트가 예상치 못하게 종료될 경우, 임시 파일이나 리소스가 정리되지 않을 수 있습니다.

해결 방법

trap 명령을 사용해 종료 신호를 처리하세요.

#!/bin/bash
trap "rm -f /tmp/mytempfile; echo 'Cleaned up!'" EXIT

echo "Creating temporary file"
touch /tmp/mytempfile
echo "Temporary file created"

결론

이 글에서는 Linux Bash 스크립트를 작성할 때 자주 발생하는 실수와 해결 방법을 살펴보았습니다. 실수는 누구나 할 수 있지만, 이를 사전에 방지하는 방법을 숙지하면 더 안정적이고 효율적인 스크립트를 작성할 수 있습니다. 위 내용을 참고하여 Bash 스크립팅 실력을 더욱 향상시켜 보세요!

반응형