728x90
반응형
Linux 환경에서 bash
와 sh
스크립트를 작성할 때 알아야 할 차이점과 주의점을 정리했습니다.
1. bash와 sh란?
sh (Bourne Shell)는 유닉스에서 사용되던 기본 셸로, 단순하고 POSIX 표준을 준수합니다. 반면 bash (Bourne Again Shell)는 GNU 프로젝트의 확장판으로, 배열, 고급 문자열 처리 등 더 많은 기능을 제공합니다.
Rocky Linux에서 /bin/sh
는 bash
의 심볼릭 링크지만, 호환 모드로 실행되므로 bash
의 고급 기능은 비활성화됩니다.
2. 주요 차이점
항목 | sh (Bourne Shell) | bash (Bourne Again Shell) |
---|---|---|
기능 | 제한적 (POSIX 표준 준수) | 확장된 기능 (배열, 정규식 등) |
호환성 | 높은 POSIX 호환성 | Bash 전용 기능은 POSIX 비호환 가능 |
Shebang | #!/bin/sh |
#!/bin/bash |
Rocky Linux에서 | /bin/sh 는 bash 호환 모드 |
/bin/bash 로 완전한 기능 사용 |
3. 스크립트 작성 시 주의점
- Shebang 선택:
#!/bin/sh
는 POSIX 호환 스크립트,#!/bin/bash
는 Bash 전용 기능 사용 시. - POSIX 호환성: 다른 시스템에서도 동작하려면
sh
로 작성하고,shellcheck
로 점검. - Bash 전용 기능:
[[ ]]
, 배열,=~
정규식 등은bash
에서만 동작. - 성능: 간단한 작업은
sh
가 약간 더 가볍고, 복잡한 로직은bash
가 적합. - 디버깅:
bash -x
,sh -x
,shellcheck
로 오류 점검.
4. 예제 코드
sh 스크립트 (POSIX 호환)
#!/bin/sh
if [ "$1" = "test" ]; then
echo "Argument is test"
else
echo "Argument is not test"
fi
bash 스크립트 (Bash 전용)
#!/bin/bash
array=(one two three)
for item in "${array[@]}"; do
if [[ $item =~ ^t ]]; then
echo "$item starts with t"
fi
done
5. 추천 팁
- 간단하거나 이식성이 중요하면
#!/bin/sh
사용. - 복잡한 로직에는
#!/bin/bash
로 Bash 기능 활용. shellcheck
로 코드 품질 점검.- 스크립트에 주석을 추가해 셸 종류 명시.
반응형
'리눅스 리뷰' 카테고리의 다른 글
우분투(Ubuntu) 설치 가이드: 단계별로 따라하기 쉬운 설치 방법 (0) | 2025.05.06 |
---|---|
Linux에서 관리자 권한 부여 방법 (0) | 2025.05.05 |
CentOS 7에서 yum을 다시 활성화하는 방법 (0) | 2025.03.19 |
🚀 CentOS에서 Rocky Linux로 마이그레이션 후 성능 최적화 가이드 (0) | 2025.03.19 |
🐧 CentOS vs Rocky Linux 완벽 비교! (2025 최신) (0) | 2025.03.19 |