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 스크립팅 실력을 더욱 향상시켜 보세요!
'Linux Bash shell script' 카테고리의 다른 글
Bash Shell Script 코드 스타일과 읽기 좋은 스크립트 작성법 (0) | 2025.02.15 |
---|---|
Shell Script로 웹 크롤링(Web Crawling) 데이터 정리하기 (0) | 2025.02.13 |
Bash Shell Script - CSV 파일 처리하기 (0) | 2025.02.12 |
Linux Bash Shell Script로 사용자 관리 자동화하기 (0) | 2025.02.11 |
Bash Shell Script 서버 상태 모니터링 (0) | 2025.02.10 |