1. 쉘(Shell)이란?
사용자의 명령을 해석해서 커널에게 전달하고 커널의 실행결과를 사용자에게 나타내주어 컴퓨터의 OS와 사용자를 중재해주는 역할을 하는 프로그램
• "명령어 해석기" 또는 "사용자 인터페이스"라고 부르기도 함
• 쉘 (Shell) 자체는 운영체제가 아니다.
• 리눅스의 기본 쉘은 BASH (Bourne Again SHell)이며, 본 쉘을 개발한 Steven Bourne의 이름을 기리며 붙여졌다.
• 리눅스 시스템에서 지원하는 쉘의 목록 확인: /etc/shells
1) 쉘의 역사
• 1971년: 켄 톰프슨이 최초 버전의 유닉스에 도입된 유닉스 쉘 (Thompson Shell)을 개발
• 1977년: AT&T 벨 연구소의 스티븐 본이 본 쉘 (Bourne Shell, sh)를 개발함
• 1980년: 캘리포니아 버클리 대학의 빌 조이가 C언어로 기반이 작성된 C 쉘을 개발함
• 1983년: 벨 연구소의 데이비드 콘이 본 쉘과 하위 호환하면서 C쉘의 많은 기능을 포함하는 콘 쉘 (Korn Shell)을 개발
이후 자유 소프트웨어 진영 측에서 특허권이 없는 쉘을 추구하였고, 그에 따라 그 당시 인기였던 쉘들을 개선하여 BASH 쉘을 개발
- 1991년 10월에 발표된 리눅스 커널 버전 0.02에 gcc, make등의 컴파일 도구와 BASH 쉘이 탑재
2) 쉘의 특징 및 기능
(a) 쉘의 특징
• 대화식 구조 (Interactive): 사용자의 입력을 받고 해석한 뒤, 결과를 사용자에게 다시 전달해주는 방식
• 쉘 내부 명령어와 프로그램, 유틸리티를 모아서 실행시킬 수 있는 스크립트 형태의 기능을 제공 (Shell scripts)
- 쉘 스크립트를 이용하면, 시스템의 유지 보수 및 주기적 반복이 많은 시스템 관리에 효율적
- 간결한 문법 및 강력한 기능으로 시스템 관리 및 프로토 타입에 유용
- 환경 변수를 이용해서 시스템 운영 환경을 쉽게 확인 및 조정 가능
• 사용자가 직접 커널에 명령을 내리는 것이 어렵기 때문에, 쉘을 통해서 쉽게 파일 관리, 프로세스 관리, 환경 설정 등 커널의 기능을 사용
(b) 쉘의 기능
• 자동 완성 기능
• History 기능
• Alias 기능
3) 쉘의 종류
본 쉘 계열 | C 쉘 계열 | ||
이름 | 실행 파일 | 이름 | 실행 파일 |
Bourne Shell | /bin/sh | C Shell | /bin/csh |
Korn Shell | /bin/ksh | Tenex Shell | /bin/tcsh |
BASH Shell | /bin/bash | ||
Z shell | /bin/zsh |
※ 현재 쉘 확인: echo $SHELL
※ 시스템이 지원하는 쉘 확인
• chsh -l
• cat /etc/shells
※ 쉘 변경: chsh -s /bin/csh
2. 쉘 스크립트 파일 실행
쉘 스크립트를 실행하는 방법은 크게 4가지 방법이 있다.
(1) source <파일명.sh>
(2) . <파일명.sh>
(3) sh <파일명.sh>
(4) bash <파일명.sh>
Note:
1) 쉘 스크립트의 확장자 명을 ".sh"로 명시하자.
2) 쉘 스크립트와 매직 넘버
- 쉘 스크립트를 사용 시, 해당 쉘 스크립트가 어떤 쉘을 사용하는지 명시를 해줄 필요가 있다.
→ 이때, "#!"를 사용하며 이를 매직 넘버라 부른다.
- 사용할 쉘의 절대 경로를 매직 넘버 뒤에 붙인다.
- 매직 넘버를 작성하지 않을 시, 기본적으로 BASH 쉘이 실행된다.
3. 쉘 변수
1) 일반적인 쉘 변수의 선언 및 생성
• 환경 변수의 이름 정의
- 환경 변수는 관례적으로 대문자로 쓰는 것이 일반적
- 환경 변수의 이름은 최대 20글자로 숫자 또는 밑줄로 이루어진 텍스트 문자열이다.
- 환경 변수의 이름은 영문 대소문자를 구분한다.
• 환경 변수 선언
- 쉘에서 변수를 사용할 때는 대입연산자 "="를 사용한다.
※ 주의: 대입 연산자의 좌우에 공백이 있어선 안된다.
ex) 잘못된 정의: value = 1
ex) 올바른 정의: value=1
- 공백이 있는 값을 대입하는 경우에는 반드시 따옴표 (",")를 사용해주어야 한다.
※ 큰 따옴표의 경우, echo로 문자열 출력 시 변수 대체 기능이 있지만, 작은 따옴표는 없다.
ex-1) 큰 따옴표를 사용하는 경우
>>> Value=1
>>> echo "Print Value: $Value"
Print Value: 1
ex-2) 작은 따옴표를 사용하는 경우
>>> Value=1
>>> echo 'Print Value: $Value'
Print Value: $Value
2) 변수의 출력 및 지정된 변수 사용
• 정의된 변수를 사용하는 경우에는 $를 변수명 앞에 붙여준다: $<변수명>
ex) $Value
• 주의: 변수명과 $ 사이에 공백이 있어선 안된다.
• "$"기호를 붙이지 않으면 변수명을 일반적인 문자열로 인식함.
3) 쉘 스크립트의 매개변수
NOTE: 쉘에서 명령의 출력을 변수에 지정하는 두 가지 방법
쉘스크립트에서 주어진 명령의 출력 또는 결과를 변수에 지정하는 방법은 두 가지가 있다.
a. 역 따옴표 문자(``), ( ESC 키 아래 그리고 숫자 1번 왼쪽에 있는 문자)
b. $() 형식
ex) date 명령어를 변수 example에 대입
방법 1
$ example=`date`
$ echo example
Sun 27 Jun 2021 01:22:39 AM KST
방법 2
$ example=$(date)
$ echo example
Sun 27 Jun 2021 01:22:39 AM KST
Appendix 1. BASH 환경 변수
변수 | 기능 |
HOME | 홈 디렉토리의 절대 경로 |
HOSTTPYE | 하드웨어 타입 |
TERM | 로그인한 사용자의 터미널 종류 |
SHELL | 로그인한 사용자의 쉘을 보여줌 |
LOGNAME USER |
사용자의 로그인 이름 |
UID | 로그인한 사용자의 UID |
메일이 저장되는 곳의 절대 경로 | |
OLDPATH OLDPWD |
이전의 작업 디렉토리 |
PWD | 로그인한 사용자의 현재 작업 디렉토리 |
OSTYPE | 운영체제의 종류 |
PATH | 명령어의 탐색 경로 - 셀에 입력된 명령어가 내부 명령어가 아닐 시, 환경 변수 PATH에 있는 경로에서 해당 명령어를 찾으려고 함 |
COLUMNS | 터미널에 설정할 열의 수 |
LINES | 터미널에 설정할 행의 수 |
BASH | BASH 쉘의 절대 경로 |
SHLVL | 실행되고 있는 쉘의 갯수 |
HISFILE | 히스토리에 사용할 파일의 절대 경로 |
HISFILESIZE | 히스토리 명령어에 의한 명령수 |
TERM | 터미널 타입 |
DISPLAY | X 윈도우 트래픽을 처리할 X 디스플레이의 서버 위치 |
LANG | 쉘 사용 시 기본으로 지원되는 언어 |
Appendix 2. BASH 명령어
'프로그래밍 언어 > Shell script(BASH)' 카테고리의 다른 글
[Shell script] 여러 개의 사용자 계정 만들기 (0) | 2021.06.03 |
---|---|
[Shell scripts] 기본적인 스크립트 제어 (if, for, where, case) (0) | 2021.05.17 |
[Shellscript] 정수 및 실수 연산 (0) | 2021.04.20 |
[Bash/Shell script] 디렉토리 리스트 출력 (0) | 2021.02.05 |
[Bash/Shell script] Sort 함수 정리 (0) | 2021.02.05 |
댓글