Shell script는 unix shell의 command line interpreter가 실행할 수 있는 명령어(리스트)를 의미한다.
unix shell, unix라는 커널의 형태가 있다. 운영체제 형태. 가장 기본적인 형태인데 unix 계열의 운영체제가 여러가지가 있는데 그 중에 하나가 리눅스다 그리고 Mac OS도 unix 계열의 운영체제다. 그리고 Windows는 unix 계열이 아니다. 그래서 우리가 개발PC로 추천할 때 맥 추천한다고 하는 가장 큰 이유 중 하나가 unix 계열에서 동작하는 shell scrip나 이런 것들을 공유하고 있기 때문에 리눅스환경과 똑같아서 서버환경을 친숙하게 접근할 수 있다.
unix shell script라는 건 unix에 있는 shell이 command line interpreter로 실행할 수 있는 명령어를 실제로 shell script라고 의미한다고 보면 됨. command line innterpreter는 줄여서 CLI 라고 부르기도 함.
터미널 화면에서 한 줄 한 줄 입력하는게 command line interpreter가 한 줄 한줄 해석해서 그 결과를 실행하고 보여준다고 보면 됨.
파일 맨 첫 줄에 다음과 같은 표시가 있다면 shell script 파일이라고 할 수 있다.
#!/bin/sh
: 현재 커서 이후 단어 복사, 숫자 yw 로 쓰면 숫자만큼의 단어가 복사됨
#!/bin/bash
: /bin/bash 를 사용하는 bash shell script
#!/bin/zsh
: /bin/zsh 를 사용하는 zshell shell script
#!
는 shebang
이라고 읽는다.
bin/sh는 예약어 같은 건 아니고 실제 이 스크립트를 해석할 근본이 되는 shell이 어디에 있어!? 라는 것이다.
그런데 unix 계열에서 slash bin의 sh는 무조건 위치한다.
그런데 /bin 에 로컬에 sh가 있어도 된다. 그런데 /bin에 sh 가 없으면 안된다.
왜냐면 이건 거의 기본 약속 같은 것이기 때문에.
그래서 shell script를 실행할 수 있는 shell 종류 (sh, bash,zsh)를 실행할 수 있는 가장 기본 명령어는 이 /bin에 항상 위치해야 한다. > 이건 기본 약속.
vi mycommand.sh
#!/bin/sh
echo $*
이 스크립트 뒤에 오는 모든 파라미터를 에코해달라는 의미의 셸 스크립트다
쉬뱅 입력한 줄 밑에 줄 부터 명령어 입력 가능하다. 띄어쓰기해서 옆에다가 적어도 안 됨.
./$FILENAME
을 이용하여 실행shell도 있고 bash도 있고 zshell도 있다고 했는데 가장 많이 쓰는 shell script는 뭘까?
sh 또는 bash shell을 가장 많이 쓴다. Mac의 monetary 부터는 zsh이 기본 shell이 되었다.
Docker 환경에서 이미지 사이즈를 줄이기 위해 alpine linux를 많이 사용하는데, alpine 리눅스에는 bash shell이 기본으로 설치되어있지 않기 때문에, 기본 shell (sh) (Bourne shell)의 활용이 더욱 중요해졌다. 따라서 이후 실습에서는 기본 쉘 스크립트 기준으로 실습을 진행한다.
bash는 sh와 거의 비슷하지만, 몇 가지 편의 기능, 문법이 더해졌다고 생각하면 좋다.
하지만 서버 개발을 하면 요새는 컨테이너 환경이라고 해서 우리가 받은 서버에 직접 설치하는 게 아니라 이미지, 필요한 프로그램들이 사전 정의된 프로그램들이 다 깔려 있는 상태의 이미지를 컨테이너라는 인스턴스로 그때 그 때 띄워서 다른 컴퓨터에서도 똑같은 환경에서 실행할 수 있는 기법을 많이 쓴다. 그럴 때 중요한 게 설치된 운영체제랑 프로그램들의 세트가 사이즈가 작아야 된다. 왜냐면 그걸 다 네트워크를 통해 다운받는데 수십가지가 되면 다은로드 받는데 오래 걸리니까. 설치하고 실행하는데도 오래 걸리기 떄문. 그래서 도커라는 컨테이너 환경에서는 다운받는 이미지 사이즈를 줄이기 위해 알파인 리눅스라는 것을 많이 사용함. 알파인 리눅스는 용량을 줄이려고 하다 보니까 bash shell도 기본 설치를 안 해놓는다. 가장 기본 쉘만 설치되어 있다. 알파인 리눅스 계열은 기본 shell만 쓰기 때문에 기본 shell 활용이 더 중요해졌다.