셸 스크립트를 sh로 작성할까? bash로 작성할까?

 
  • 출처 : 유닉스 리눅스 쉘스크립트 예제사전_한빛미디어

셸 스크립트를 작성할 때는 이식성과 호환성을 고려해서 /bin/sh가 널리 사용됩니다. 하지만 sh는 역사가 긴 셸인 반면, 수치 계산에 외부명령어가 필요하다는 단점이 있고 현대적인 프로그래밍 역시 어려운 것이 사실입니다. 따라서 bash로 셸 스크립트를 작성하는 것을 선호하는 층도 최근에는 늘고 있습니다.

bash로 셸 스크립트를 작성하는 장점은 단순히 프로그래밍 하기 쉽다는 것도 있지만 이식성과 호환성이 오히려 sh보다 낫다는 의견도 있습니다.

예를 들어 같은 리눅스라도 CentOS 등은 /bin/sh를 bash로 대신하는 반면 우분투는 dash라는 원시적인 셰로 구현합니다. 또한, 솔라리스의 sh는 리눅스의 sh에 비해 조금씩 동작이 다르다는 사실도 널리 알려져 있습니다. 그러므로 이식성, 호환성을 고려해서 sh로 셸 스크립트를 작성해도 환경에 따라 변칙적인 대응법을 고려해야 하는 경우도 많습니다. 한편, bash는 GNU 방식밖에 없으므로 bash만 설치되어 있으면 OS가 무엇이더라도 거의 동일하게 동작한다고 볼 수 있습니다. 즉, bash 스크립트 이식성이 훨씬 좋습니다.

이런 상황을 고려하면 현대 유닉스 환경에서 sh, bash 중 어떤 방식을 사용하느냐는 취향 문제로 볼 수도 있습니다(단, 시스템에 bash가 설치되어 있지 않으면 sh로 작성할 수밖에 없습니다만). 하지만 다음과 같은 규칙이 필요합니다.

   

bash 기능을 이용한 스크립트의 셔뱅(shebang)은 #!/bin/sh로 쓰지 않기

구체적으로 산술 확장이나 배열 변수를 이용하는 경우입니다. 리눅스(CentOS)는 /bin/sh가 bash를 나타내므로 bash 고유 기능을 sh 스크립트라고 지정해도 문제없이 동작하지만 주의해야 합니다. bash 스크립트 셔뱅은 #!/bin/bash(FreeBSD 라면 #!/usr/local/bin/bash)라고 적어야 합니다.

   

셸 스크립트에 얽매이지 않기

최근에는 시스템 운용 프로그램으로 펄이나 파이썬을 사용하는 사례도 늘고 있습니다. 셸 스크립트로만 해야 한다고 생각하지 말고 이런 스크립트 언어를 이용하는 걸 검토해보기 바랍니다. 하고 싶은 작업을 펄로 작성하는 쪽이 더 편하다면 sh나 bash보다는 펄이 더 낫습니다.