본문 바로가기

리눅스 리뷰

Linux에서 bash와 sh 스크립트 작성: 차이점과 주의점

728x90
반응형

Linux 환경에서 bashsh 스크립트를 작성할 때 알아야 할 차이점과 주의점을 정리했습니다.

1. bash와 sh란?

sh (Bourne Shell)는 유닉스에서 사용되던 기본 셸로, 단순하고 POSIX 표준을 준수합니다. 반면 bash (Bourne Again Shell)는 GNU 프로젝트의 확장판으로, 배열, 고급 문자열 처리 등 더 많은 기능을 제공합니다.

Rocky Linux에서 /bin/shbash의 심볼릭 링크지만, 호환 모드로 실행되므로 bash의 고급 기능은 비활성화됩니다.

2. 주요 차이점

항목 sh (Bourne Shell) bash (Bourne Again Shell)
기능 제한적 (POSIX 표준 준수) 확장된 기능 (배열, 정규식 등)
호환성 높은 POSIX 호환성 Bash 전용 기능은 POSIX 비호환 가능
Shebang #!/bin/sh #!/bin/bash
Rocky Linux에서 /bin/shbash 호환 모드 /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로 코드 품질 점검.
  • 스크립트에 주석을 추가해 셸 종류 명시.
반응형