#Shell이란?
: A special-purpose utility to interpret command line
: Shell은 special-proposed utitlity로, 응용프로그램(utility)과 커널 사이에 위치해있으며 응용프로그램의 명령어와 커널이 대화를 하도록 만들어준다. 그래서 명령어 해석기라고 부른다.
-> 우리가 명령어를 입력하게 되면 컴퓨터에서는 쉘이 명령어를 받아 해석하여 커널에게 보내면, 커널은 우리가 내려주었던 동작을 하게되고, 그에 대한 결과를 사용자에게 전달하려고 다시 쉘에게 응답을 보내 사용자에게 전달된다.
EX) Bourne Shell-> C shell-> Korn Shell ->Bourne Again Shell(Bash)
: 세대를 거치면서 기능이 추가되었다.
-> Bash shell은 Brian Fox/GNU project를 통해 개발되었다.
#Bash

: Bash shell은 많은 리눅스 버전에서의 Default shell이며, 이는 Command Line Interpreter로, prompt를 통해 Command를 입력받아 사용자와 상호작용한다.
# Advantages/Disadvantages
: Shell program은 linux shell에 의해 작동하도록 디자인된 프로그램이다.
1) 장점
- 사용하기 쉽다(shell program 작성이 코드를 작성하는 것 보다 훨씬 빠르다)
- 프로그램의 요구사항 구현에는 기여하지 않지만, 본래 호환성이 없는 부분끼리 결합하기 위해 작동하는 코드인 글루코드로써 작동한다. -> Shell을 통해 여러 프로그램이 상호작용한다.
- 자주 사용되는 operation들을 자동화할 수 있다.
2) 단점
- 문법이 어렵고, 에러 발생률이 높다.
- 다른 프로그래밍 언어에 비해 느리고, 모든 shell command마다 새로운 프로세스가 생성된다.
- 오류가 큰 문제를 발생시킬 수 있다 : 커맨드 하나만으로 모든 파일을 삭제할수도..
#Shell Variables
- 쉘 변수란 프로그램 동작에 영향을 미치는 값들의 모임으로, 수행에 필요한 정보들이 있을 수 있다.
EX) PWD=/home/user/oss , PATH=/bin:/user/oss , HOME=/home/usr
- shell에 딸려있는 변수로, 새로 세팅하고, 사용하며, 값을 해제할 수도 있다.
1) Environment Variables: 환경변수
-> 각 parent process로부터 복사되어 자식에게 되물림되는 변수로, 모든 환경변수는 새로운 프로그램을 실행할때 부모 환경변수로부터 copy된다. 따라서 리눅스 쉘 전반에 적용되는 전역변수이다.
- 내장 환경변수(Built-in environment variables)
: 리눅스에 의해 미리 정의된 환경변수가 존재하며, 이는 모두 대문자인 이름을 가져야 한다.

EX1) PATH
- PATH 명령어는 쉘이 COMMAND를 찾도록 도와준다.
- PATH에 들어있는 내용은 매번 shell에 command를 입력할때마다 쉘이 검색하는 디렉토리들의 리스트이다.
- directory를 더하고 싶을 때는 다음과 같이 입력한다.
export PATH=$PATH:새로 등록할 프로그램의 주소
- 환경변수를 등록하는 주요한 이유는 새로운 프로그램을 매번 sh명령어로 실행하여 매번 이 프로그램이 있는 폴더까지 와서 실행하는 게 아닌, 어디에서나 add 1 2와 같이 명령어처럼 바로 실행할 수 있게하기 위함이다.
EX2) cd: 디렉토리 변경, pwd : 현재 디렉토리 출력
2) 쉘 변수 설정

-> 쉘 변수를 설정할때는 공백이 있어서는 안되며, 설정된 환경변수를 확인하고 싶으면 set cmd를 사용한다.

-> 쉘 변수를 해제하고 싶으면 unset cmd를 사용한다.


3) 환경변수 설정
: 환경변수(쉘 전역변수)를 사용할때는 export cmd를 사용한다. 확인할 때는 env cmd 사용


-> 위 그림을 통해서 환경변수는 자식에게도 전파되지만, 쉘 변수인 no1은 자식 프로세스에서 출력되지 않는다.
+) export -n option을 통해서 환경변수를 일반 shell 변수로 바꿔 버릴 수 있다.


-> 함께 협업할때 각각 사용하는 version이 다를 수 있으므로 개발 시에 환경변수를 통해 미리 약속된 경로를 사용한다.
'Computer Science > OpenSource+Git' 카테고리의 다른 글
Linux Command and Redirection (0) | 2021.12.11 |
---|---|
shell command 확장과 명령어 치환 (0) | 2021.12.11 |
Git Branch Command (0) | 2021.10.24 |
Git Version Control Command (0) | 2021.10.24 |
Git Overview/ Linux Basic Command (0) | 2021.10.24 |