커널은 프로세스, 메모리, 입출력 시스템, 파일 시스템 등을 관리한다. 즉 운영체제의 핵심 기능을 담당한다.
컴퓨터가 부팅하는 순간 커널 코드가 메모리에 올라가고, 다른 프로그램들과 다르게 항상 메모리에 상주한다. (Memory Resident)
커널은 운영체제의 핵심 기능을 담당하기 때문에 일반 사용자는 커널에 직접 접근할 수 없다. 그래서 간접적으로 커널에서 제공하는 기능을 이용할 수 있도록 System Call을 제공한다. 즉, 커널에 저장되어 있는 함수임에도 불구하고 사용자가 호출할 수 있도록 한다.
System Call은 커널과 사용자 사이의 인터페이스 역할을 한다.
셸이란, 사용자로부터 명령을 입력받아 이를 해석하고 OS가 해당 명령을 수행하도록 하는 프로그램이다. (셸도 하나의 프로그램임!!!) 즉, 사용자와 커널 사이의 인터페이스 역할을 한다.
셸을 사용하면 커널의 복잡한 동작 방식을 알 필요 없이 시스템 자원을 쉽게 관리할 수 있다.
echo $0을 입력하면 현재 사용 중인 셸의 종류를 알 수 있다.
터미널 > 환경설정 에서 기본 로그인 셸을 설정할 수도 있다. 
ls /bin
bash, zsh 뿐만 아니라 echo, mkdir, rmdir 등의 명령어들도 파일의 형태로 존재한다.
놀랍게도 이제부터 본론임..
그렇다면 우리는 왜 셸 스크립트를 알아야 하는가? ???? 셸 스크립트는 어떤 경우에 사용될까?
주요 설정파일의 권한 확인
서버 모니터링
개발 환경 셋팅 자동화
미리 작성해 둔 셸 스크립트 파일을 실행만 하면, 개발 환경을 자동으로 셋팅할 수 있다.
신입 사원이 들어왔을 때, 이런 프로그램 설치하시고 어쩌구 저쩌구 문서로 넘겨줄 필요가 없음
우아한 형제들 블로그 참고하세요 ..
함수를 만든다고 생각하면 될 것 같다.
일정한 동작을 하는 스크립트 파일을 만들고, 명령어를 등록해 이 파일을 실행해주세요! 라고 하면, 명령어를 실행할 때마다 해당 파일이 실행된다.
git push뿐만 아니라 우리가 반복해서 하는 작업들을 자동화할 수 있다는 장점이 있다.
#!/bin/zsh
cd HEllo
mkdir hi
ls
HEllo 디렉토리로 이동 → hi 라는 디렉토리 생성 → ls (현재 디렉토리에 속한 파일들 보여줌)
hi라는 디렉토리가 만들어진 것을 확인할 수 있다! (ls 명령어를 넣었으니까 바로 나타나는거임)

#!/bin/zsh
array=("myDir" "hello" "dir2")
cd HEllo
for str in "${array[@]}";
do
echo $str
done
HEllo 디렉토리로 이동 → array의 값들을 하나씩 출력(echo)

#!/bin/zsh
array=("myDir" "hello" "dir2")
cd HEllo
for str in "${array[@]}";
do
mkdir $str
done
ls
아까는 그냥 값들을 출력해줬다면, 이번에는 그 값을 이름으로 하는 디렉토리를 생성해주고 ls

/bin/bash 프로그램을 통해 해석되어야 한다는 뜻#!/bin/zsh셸 스크립트로 오만가지 프로그램을 만들 수 있답니다 ..
끝!
셸에 대해서 몰랐던 내용들 콕콕 찔러주는 좋은 글이네요!ㅎㅎ
잘 읽고 갑니당~