개요
안녕하세요 피터입니다.
오늘은 여러분들이 왜 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
'프로그래밍 > Bash' 카테고리의 다른 글
[bash 쉘 스크립트] 변수 할당(assignment)과 치환(substitution) (0) | 2020.08.17 |
---|---|
[bash 쉘 스크립트] 종료(exit)와 종료 상태 (exit status) (3) | 2019.10.30 |
[bash 쉘 스크립트] 스크립트 실행하기 (0) | 2018.06.04 |