Recommanded Free YOUTUBE Lecture: <% selectedImage[1] %>

Shell Programming

완벽한 프로그래밍 언어는 없다. 최고의 프로그래밍 언어 같은 것도 없다. 단지 해당 목적의 일을 잘 수행해낼 수 있는 종류의 언어가 있을 뿐이다. -- Herbert Mayer

컴퓨터 산업에 종사하는 모든 사람이 프로그래밍언어를 잘 다룰 수 있는 것은 아니다. 물론 시스템 관리자건, 네트워크 관리자건 간에 프로그래밍 언어를 잘 다루면 좋긴 하다. 하지만 컴퓨터 산업의 분과가 다양해지고 각 분과가 전문화 되면서, 프로그래밍까지 잘하기는 매우 어려운게 현실이다.

하지만 프로그램 개발에 집중하는 소프트웨어 개발자가 아니더라도, 프로그래밍 언어를 익혀두면 많은 도움이 된다. 문자열을 조작하고, 프로그램의 실행 스케쥴을 조절해서 작업을 자동화 하고, 설정을 바꾸고, 문제가 있는 프로세스를 제거하고, 운영체제의 관리 정보를 수집하고.. 등등등. 프로그래밍 언어는 필수라고 할 수 있다.

그럼 이제 어떤 프로그래밍 언어를 선택할 것인가 하는 문제가 남는다. 전문 소프트웨어를 개발할게 아니라면, shell을 고려해볼만 하다. 어떤 환경에서도 프로그램을 만들 수 있다. Shell은 시스템 명령어들을 묶어서 일괄작업 하는 형식으로 작동하기 때문에, 직관적이고 쉽게 원하는 일을 하는 프로그램을 만들 수 있다. 특히 batch(일괄)작업에 효율적이라서, 시스템/네트워크 관리자에게 큰 도움이 된다.

쉘 스크립트는 복잡한 일을 처리하는 빠르고 - 지저분한 방법을 제공한다. 다른 말로 복잡하면서도 우아한 프로그램을 만드는데는 적당하지 않다. 이런 일을 하기 위해서는 C, C++, Perl, Python등의 언어를 사용해야 한다.

앞서 쉘은 일괄적업에 효율적이라고 했는데, 이는 유닉스의 철학을 그대로 계승하고 있기 때문이다. Simple is Best라고 하는데, 유닉스의 프로그램은 딱 자기에게 주어진 일만 전문적으로 잘 수행할 수 있도록 작고 날렵하다. 이들 작은 프로그램을 pipe로 엮어서 복잡한 일을 처리하게 한다.

일반적인 프로그래밍 언어들은 "배열", "포인터", "클래스", "구조체" 그리고 데이터를 다루기 위한 알고리즘들까지를 제공하는데 반해 쉘은 이런 것들을 가지고 있지 않다. - 배열 같은 걸 가지고 있긴 한데, 다른 언어들의 배열과는 비교할 수 있는 수준이 아니다. 그냥 딱 사용할 수 있을 정도다 -.

쉘로 하기에 적당하지 않은 것들

  • 컴퓨팅 자원을 집중적으로 사용하는 작업. : sorting, hashing, recursion ... 등
  • Floating 연산, 복잡한 수치 연산등 : Java, C++, FORTRAN을 사용하라.
  • 다양한 플랫폼에 이식 : C, Java를 사용하라.
  • 구조체를 포함하는 복잡한 프로그램.
  • Mission critical 한 애플리케이션
  • 보안이 중요한 작업.
  • 파일을 다양하게 제어하는 프로그램. : Bash는 순차적인 엑세스 방식에 적합하다.
  • 다차원 배열의 사용.
  • 링크드 리스트나 트리등의 자료구조 사용
  • socket" Socket입출력
  • Legacy code나 라이브러리를 이용해야 하는 작업.
  • 하드웨어의 직접 제어.
  • GUI 인터페이스를 제공하는 프로그램.

Bash Shell

쉘은 여러가지 종류가 있는데, 그 중 Bash 쉘을 사용할 것이다. Bash는 Bourne-Again shell의 줄입 말이다. 유닉스에서 사용하던 shell을 개선한 쉘이라고 보면 된다. 고전적인 쉘로는 Korn Shell, C Shell, Z Shell 등이 있는데, 지금은 Bash만 사용한다고 보면 된다.