예전의 포스트에서 운영체제의 쉘(shell)이 도대체 무엇인지에 대해 설명했다. [리눅스 기초] 쉘의 이해(Linux Shell) 쉘을 이해하는데 성공했다면 다음 단계는 쉘 스크립트(Shell Script)에 대해 공부하는 것이 일반적인 Unix/Linux 운영체제를 공부하는 순서라고 할 수 있다.
쉘 스크립트(Shell Script)란 ?
쉘 스크립트를 이해하려면 먼저 스크립트(Script)가 무엇인지 이해해야 한다. 스크립트란 일반적으로 인터프리트(interpret:대화) 방식으로 동작하는 컴파일하지 않는 프로그램이라고 이해하면 된다. 즉 “여러 명령어로 작성된 프로그램을 한 줄 단위로 읽어 프로그램이 종료될 때 까지 해석과 실행이 반복되도록 작성된 컴파일하지 않는 프로그램”이라는 의미다. 조금 어려운가? 그렇다면 다음과 같이 이해하자.
스크립트란, 텍스트 형식으로 저장되는 프로그램으로서 한줄씩 순차적으로 읽어 실행되도록 작성된 프로그램이다.
스크립트는 위의 정의(?)와 같다. 그렇다면 쉘 스크립트는 스크립트와 무엇이 다를까? 아마도 이런 말들을 들어보았을 것이다. 쉘 스크립트, 펄 스크립트, 자바 스크립트 등등등….
스크립트라는 단어 앞에 여러가지 수식어(?)가 붙는다. 이 수식어는 바로 스크립트를 읽어 실행해주는 인터프리트 엔진이 무엇인지를 말한다고 이해하면 된다. 그렇다 쉘 스크립트를 정의한다면 다음과 같이 정의 할 수 있다.
쉘 스크립트는 운영체제의 쉘 즉 bash, ksh, csh 등이 읽어 실행해주는 스크립트 언어다.
그렇다면 펄 스크립트는 perl 이라고하는 인터프리트 엔진이 읽어 실행해주는 스크립트 언어라고 할 수 있다. 그러면 자바 스크립트는 누가 읽어 실행해 주는 스크립트 언어일까? 그것은 바로 IE, 크롬, 네이버의 웨일과 같은 웹브라우저에 내장된 자바 스크립트 엔진이다.
각각의 스크립트 언어들은 문법이 모두 다르기 때문에 호환되지 않는다. 또한 실행파일을 만들때 작성되는 C언어와도 다르다. 그리고 C언어 등과 같이 컴파일 과정을 통해 컴퓨터의 CPU만 이해할 수 있는 기계어 코드로 컴파일되지 않기 때문에 Notepad 같은 편집기로 읽어 내용을 파악하고 수정하는 것도 가능하다.
컴파일 언어인 C언어와 쉘 스크립트의 비교
다음은 C언어와 쉘스크립트로 된 똑같은 기능을 하는 프로그램이다.
두 프로그램 모두 실행하면 화면에 “hello~ c~”와 “hello~ script~” 한줄을 출력하는 프로그램이다. 하지만 두 프로그램이 파일로 저장된 뒤 실행되기 까지는 여러 차이점이 있다. 그 차이점을 알아보면 다음과 같다.
- C언어로 작성된 프로그램은 컴파일(Compile)하여 기계어로 변환된 목적파일(Object File)로 만들어준 뒤 링크(Link)과정을 거치고 실행퍼미션(x)을 주어야만 실행이 가능하지만 쉘스크립트로 작성된 파일은 이러한 과정이 필요없고 실행퍼미션만 주면 된다.
- C언어로 작성된 프로그램은 실행을 위해 컴파일되면 vi, cat 과 같은 명령으로 내용을 확인할 수 없는 바이너리 구조로 변형되지만 쉘 스크립트는 파일의 변환과정이 없어 Notepad와 같은 텍스트 편집기로 내용을 볼 수 있고 필요하다면 누구나 수정이 가능하다.
- C언어로 작성된 프로그램은 기계어로 변환되었기 때문에 커널에 의해 실행되지만 쉘 스크립트는 쉘(bash, sh, ksh) 이 한줄~한줄~ 읽고 실행한다.
- C언어로 작성된 프로그램은 정식 프로세스로 생성되지만 쉘 스크립트로 작성된 프로그램은 이름은 보이지만 정식 프로세스는 아니다.
아래는 위의 두 프로그램의 작성과 파일정보를 확인하는 화면이다. 초심자라면 리눅스에서 똑같이 한번 테스트해보는 것도 좋겠다.
hello.c 의 컴파일은 hello.c를 작성한 뒤 다음의 명령을 통해 수행하면 된다.
# gcc -o hello hello.c
이 명령을 수행하면 실행파일 hello 가 생성된다.
이 내용을 완전하게 이해했다면 쉘 스크립트 작성을 공부할 준비가 어느정도 되었다고 할 수 있다.
다음글 : [리눅스 기초] 쉘스크립트의 사칙연산과 문자열 자르기