본문 바로가기
프로그래밍 언어/Shell script(BASH)

[Shellscript] 쉘, 쉘 스크립트 및 쉘 변수 (BASH)

by Physics 2021. 4. 20.
728x90

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
MAIL 메일이 저장되는 곳의 절대 경로
OLDPATH
OLDPWD
이전의 작업 디렉토리 
PWD 로그인한 사용자의 현재 작업 디렉토리 
OSTYPE 운영체제의 종류
PATH 명령어의 탐색 경로 
- 셀에 입력된 명령어가 내부 명령어가 아닐 시, 환경 변수 PATH에 있는 경로에서 해당 명령어를 찾으려고 함 
COLUMNS 터미널에 설정할 열의 수 
LINES 터미널에 설정할 행의 수
BASH BASH 쉘의 절대 경로
SHLVL 실행되고 있는 쉘의 갯수
HISFILE 히스토리에 사용할 파일의 절대 경로
HISFILESIZE 히스토리 명령어에 의한 명령수 
TERM 터미널 타입
DISPLAY X 윈도우 트래픽을 처리할 X 디스플레이의 서버 위치
LANG  쉘 사용 시 기본으로 지원되는 언어

 

Appendix 2. BASH 명령어  

728x90

댓글