Script란 무엇인가?
스크립트란 하나의 파일에다 기존에 존재하는 명령어들을 집어넣어 순차적으로 해석해서 실행하는 것을 의미한다.
대표적으로 펄 스크립트, 셸 스크립트가 존재한다.
프로그램이란 무엇인가?
하나 혹은 여러개의 파일에 소스코드를 집어넣어놓고 컴파일러가 컴파일해서 바이너리 명령어 프로그램을 만들어 동작시키도록 해주는것을 프로그램이라고 한다. 이를 인터프린터, 컴파일러 프로그램이라고도 한다.
대표적으로 C, C++, 자바 이런것들이 될 수 있다.
Shell Script란 무엇인가?
리눅스 command들을 모아놓은 아스키 텍스트 파일이다.
간단한 예를 보자
vi 편집기를 통해 하나의 셸 파일을 만들어 보자
echo, date, df 와 같은 간단한 명령어를 모아놓은 셸 파일을 만들었다.
이를 실행 시키려면 실행 퍼미션을 할당해야 실행이 가능하다.
현재 test 셸은 실행 퍼미션이 없기 때문에 chmod 명령어를 통해서 test.sh에 x 즉 실행 권한을 넣어준다.
다시한번 ls 명령어를 통해 살펴보면 쓰기 권한이 추가 된 것을 볼 수 있다.
이제 test.sh 파일을 실행을 시켜보자.
그럼 실행 결과를 확인할 수 있다. 화면에 출력하는 echo 명령어, 날짜를 표기하는 date 명령어 파일시스템의 사용 공간을 표기하는 df 명령어 모두 화면에 잘 출력된 것을 확인할 수 있다.
Shell 스크립트는 또한 특별한 의미가 정해진 기능이 존재한다.
# : 주석이며 코멘트를 달 때 사용한다
#!/bin/bash: 셔뱅, 해시뱅이라고 부르며 스크립트를 실행 할 sub shell 이름을 나열해 줄 수 있다.
또한 top-down 방식으로 해석되며 sub shell로 동작하게 된다.
sub shell이란 무엇인가?
그렇다면 위에서 설명한 sub shell이란 무엇일까? 예제로 살펴보자
pwd라는 명령어를 사용한다. pwd는 현재 위치한 디렉토리 위치를 보여주는 것이다. 우리는 home의 ubuntu에 위치하는 것을 확인할 수 있다.
여기서 ls 명령어를 통해 /bin/bash 라는 커맨드를 확인할 수 있다. bash는 셸로 셸을 만들어 주는 프로그램으로 바이너리 프로그램으로 존재한다.
즉 /bin/bash를 입력하면 bin 밑에 있는 bash 셸이 시작이 된다. 즉 셸 안에서 또 다른 셸을 실행 할 수 있다. 기본 셸을 로그인 셸이라고 하며 방금 시작한 셸을 서브셸이라고 한다.
먼저 bash 셸을 서브셸로 시작을 한 후 위치를 최상단 디렉토리로 변경한다. 그 후 exit를 누르고 마지막으로 현재 위치를 살펴보면 어디일까? 바로 /home/ubuntu이다.
즉 최상단 루트로 간 것은 Sub Shell이므로 sub shell을 종료시키자 로그인 셸이 등장하고 이 위치는 아직 변동시킨 것이 없으므로 /home/ubuntu임을 알 수 있다.
즉 우리가 test.sh 이라는 셸 프로그램을 실행한다면 가장 먼저 Sub Shell인 bash로 이동하게 되고 나머지 리눅스 명령어들이 sub shell에서 실행되는 것이다.
셸 스크립트 구문에 가장 첫줄에 아무것도 작성하지 않으면 로그인셸과 동일한 셸에서 명령이 실행되게 된다.
또한 셸 스크립트를 만들 때 PATH 라는 환경변수를 잘 사용하는 것이 좋다. 한가지 예를 보자
우리는 bin이라는 디렉토리를 하나 만들고 빈 디렉토리로 접속하자. 우리는 여기에 셸 스크립트를 모아놓을 것이다.
우리는 bin에 모아놓은 스크립트를 실행하기 좋게 하기 위해 PATH 라는 환경변수를 사용 할 것이다. PATH는 :을 기점으로 명령어를 순차적으로 위치를 찾아 실행시켜 주는 것이다.
환경변수 PATH에 내 홈 디렉토리의 bin 디렉토리를 추가해 준다.
그 이후 echo를 통해 출력해보면 맨 마지막에 내 홈 디렉토리의 bin 디렉토리가 추가 된 것을 볼 수 있다.
그 후 cat 명령어를 통해 sample.sh 라는 셸 프로그램을 만들어 준다. 이는 오늘 날짜와 Hello, linux world를 찍어 주는 것이다.
이는 bash shell을 sub shell로 사용하고 있고 2번 라인부터 7번 라인은 주석이지만 스크립트에 대한 간단한 설명을 적어 놓았다.
이를 동작시켜 보자. 동작 시키려면 위에서도 말했듯 실행 권한이 있어야 한다. chmod 명령어를 통해 sample.sh에 실행 권한을 보여한다.
그 다음 sample.sh를 통해 명령어를 실행시켰다. 환경변수에 bin을 넣었기 때문에 date나 echo 같은 리눅스 명령어처럼 ./을 사용하지 않고 바로 실행시킬 수 있었다.
두번째로 만들어 볼 스크립트는 내 디렉토리의 사용량을 나타내는 스크립트이다.
이 역시 읽기 권한을 추가해준다.
셸 스크립트를 실행시켜보면 /var 디렉토리의 사용량을 볼 수 있다. 이렇듯 특정 디렉토리의 사용량이 얼마나 증가되고 있는지에 대해 반복적으로 살펴 볼 수 있다.
출처
'[Linux]' 카테고리의 다른 글
[Linux] Web 서버와 Was 서버의 차이점 (0) | 2023.01.31 |
---|---|
[linux] 메일서버란 무엇인가? (0) | 2023.01.25 |
[총정리] Crontab 사용법 (1) | 2023.01.15 |
[linux] [따베셸] Bash shell과 Rules2 (0) | 2023.01.12 |
[linux] [따배셸] Bash shell과 Rules 1 (0) | 2023.01.11 |