개요

 

안녕하세요 피터입니다.

오늘은 여러분들이 왜 Bash 쉘 프로그래밍을 배워야 하는지에 대해서 설명드리겠습니다. 

리눅스(Linux) 환경에서 개발을 하거나, 시스템 관리자 업무를 수행하는데 있어서 Bash 쉘을 잘 다룰 수 있다는 점은 굉장한 경쟁력이 됩니다.

그만큼 업무를 효율적으로 수행할 수 있으니까요.

 

Bash"Bourne-Again Shell"의 앞 글자를 딴 것입니다.  Stephen Bourne의 Bourne Shell에 대한 클리쉐로 일종의 말장난 같은 겁니다. Bash는 이제 모든 종류의 유닉스에서 쉘 스크립트에 관한 실질적인 표준입니다.

쉘은 명령어 해석기(command interpreter)로서, 단지 커널과 사용자 중간에 놓여 있는것 이상으로 꽤 강력한 프로그래밍 언어입니다.

일반적으로 스크립트(Script)라고 부르는 쉘 프로그램은 .sh 확장자로 만드는 경우가 많으며 시스템 콜(System call)이나 다른 유틸리티(Utility) 또는 실행 파일 등을 서로 연결하여 특정 목적에 맞는 프로그램을 쉽게 만들 수 있게 해줍니다.

쉘 내부 명령어와 테스트, 루프 등을 활용하여 다소 복잡한 로직의 프로그램도 빠르게 개발이 가능하기 때문에 정식 패치 이전에 즉각적으로 반영이 필요한 긴급 이슈에 대응할 때에도 유용하게 사용될 수 있습니다.

이밖에도 쉘 스크립트는 완전히 구조적인 프로그래밍 언어의 편리한 부가 기능들이 필요없는 작업들, 특별히 시스템 관리자의 시스템 관련 작업이나 반복적인 일들을 처리할 때 굉장히 효율적입니다.

 

쉘 문법은 간단하고 명확하기 때문에 배우는 것은 크게 어렵지 않습니다. 테스트와 디버깅도 쉽습니다.

이런 강점은 실제 프로젝트를 진행하기 앞서서 프로토타이핑(Prototyping) 하기에 좋습니다.

개발에 들어가기 전 설계 단계에서 구조적인 결함을 조기에 발견할 수 있다면 그만큼 전체 프로젝트의 완성도가 높아질 뿐 아니라 리소스 낭비를 대폭 줄일 수 있습니다.

이러한 장점에도 불구하고 쉘 스크립트는 명확한 한계를 갖고 있기 때문에 아래와 같은 프로젝트는 다른 언어로 개발하는 것이 바람직합니다.

 

쉘 스크립트를 쓰면 안 될 때

  • 리소스에 민감한 작업들, 특히 속도가 중요한 요소일 때(정렬, 해쉬 등등)

  • 강력한 산술 연산 작업들, 특히 임의의 정밀도 연산(arbitrary precision)이나 복소수를 써야 할 때(C++을 쓰세요)

  • 플랫폼간 이식성이 필요할 때(C를 쓰세요)

  • 구조적 프로그래밍이 필요한 복잡한 어플리케이션(변수의 타입체크나 함수 프로토타입등이 필요할 때)

  • 업무에 아주 중요하거나 회사의 미래가 걸렸다는 확신이 드는 어플리케이션

  • 보안상 중요해서, 여러분 시스템의 무결성을 보장하기 위해 외부의 침입이나 크래킹, 파괴등을 막아야 할 필요가 있을 때

  • 서로 의존적인 관계에 있는 여러 콤포넌트로 이루어진 프로젝트

  • 과도한 파일 연산이 필요할 때(Bash는 제한적인 직렬적 파일 접근을 하고 , 특히나 불편하고 불충분한 줄단위 접근만 가능)

  • 다차원 배열이 필요할 때

  • 링크드 리스트나 트리같은 데이타 구조가 필요할 때

  • 그래픽이나 GUI를 만들고 변경하는 등의 일이 필요할 때

  • 시스템 하드웨어에 직접 접근해야 할 때

  • 포트나 소켓 I/O가 필요할 때

  • 예전에 쓰던 코드를 사용하는 라이브러리나 인터페이스를 써야 할 필요가 있을 때

  • 독점적이고 소스 공개를 안 하는 어플리케이션을 짜야 할 때(쉘 스크립트는 필연적으로 오픈 소스입니다.)

 

 

 
 

-Peter의 우아한 프로그래밍

여러분의 공감과 댓글은 저에게 크나큰 힘이 됩니다. 오류 및 의견 주시면 감사하겠습니다.

 

참고

http://wiki.kldp.org/HOWTO/html/Adv-Bash-Scr-HOWTO/index.html

 

블로그 이미지

친절한 Peter Ahn

IT 정보 공유, 프로그래밍 지식 공유

댓글을 달아 주세요