본문 바로가기
Shell

Shell, Shell Script, .sh란

by yororing 2024. 4. 30.

01 Shell

1. 정의

  • 사용자가 입력한 명령어 커널에게 전달될 때 해석기
  • 즉, 명령어 해석기이자 스크립트 언어
  • 해석 기능, 프로그래밍 기능, 사용자 환경 변수 설정 가능 

2. 종류

종류 약자
Bourne Shell bsh?
C Shell csh
Korn Shell ksh
Bash Shell bash

02 Shell Script (.sh 파일, 쉘 파일)

1. 정의

  • command line에서 특정 기능이 수행되도록 지정된 Script (명령어들의 집합)
  • 쉘에 의해 수행되도록 작성된 프로그램
  • interpretor 방식으로 작동
  • 제어 구조에 따라 쉘 명령어나 함수 실행 가능
    • 즉, 평문의 텍스트 파일로 하나의 명령어처럼 실행될 수 있는 실행 가능한 프로그램
    • 쉘이 파일의 내용을 읽어 처리
    • 선택/반복 등의 프로그래밍 구조를 사용할 수 있음
    • 긴 작업, 반복적으로 일어나는 작업을 쉘 스크립트로 작성할 수 있음
    • 쉘 스크립트를 새로운 명령어처럼 사용할 수 있음
  • 장점
    • 다른 언어보다 빠르게 동작함
  • 단점
    • 오류 확인이 어려움

2. 문법

0) shebang(#!)로 시작 [셔뱅]

  • 쉬뱅/셔뱅 어원은 Unix 계열에서 다음과 같다: sharp(#) + bang(!) 합성어 → Sha-bang
  • shell script는 Shebang으로 시작
    • 쉘 스크립트 작성 시 가장 첫 줄에 #!/bin/bash (예시)라는 문구를 쓰게 되는데 이것의 의미는 bash shell을 사용하겠다는 의미
    • 일반적으로 #는 주석이지만 #!와 같이 느낌표와 함께 쓰이면 주석이 아니라 she-bang(#!)이라고 불리며 #! 다음에 오는 문구를 실행함
    • 예를 들면 #!/bin/bash라고 쓰면 스크립트가 실행될 시 /bin/bash부터 실행하게 됨. 따라서 /bin/bash 이후에 나오는 명령어는 bash를 이용해서 해석할 것이라는 의미
#!/bin/bash
...
script 내용
...
  • Shebang이 있는 스크립트는 프로그램 실행 시,
    • 프로그램 loader는 지정된 인터프리터 프로그램 (i.e., /bin/bash)을 실행하고, 스크립트를 실행하려고 시도했을 때 처음 사용된 경로를 인수로 전달함
    • 이렇게 하면 프로그램이 해당 파일을 입력 데이터로 사용 가능
  • 예) 스크립트가 path/to/script라는 경로로 이름이 지정되어 있고, 첫 줄에 #!/bin/sh가 있으면, 프로그램 loader는 /bin/sh 프로그램을 실행하도록 지시받고, path/to/script를 첫 번째 인수로 전달

1) 주석

  • # 기호로 시작
  • 그러나 맨 첫 줄인 #!는 주석이 아님!
# 주석 내용

2) 변수 (variable)

3) 기본 출력

echo 기본 출력, 자동 개행 (줄바꿈)
printf 기본 출력, 자동 개행 X

 

# 기본 출력, 자동 개행
echo "echo test"

# 기본 출력, 자동 개행 X
printf "printf test\n"

# 스크립트 파일명 출력
printf "Script File Name: %s\n" $0

# 입력받은 파라미터 출력
printf "%d arguments %s %s\n" $# $1 $2

3. 작성 방법

# vi example1.sh
#!/bin/bash
echo "사용자 이름:" $USER
echo 호스트 이름:" $HOSTNAME
exit

# vi example2.sh
#!/bin/bash
echo "사용자 이름:" $USER
echo 호스트 이름:" $HOSTNAME
exit 0

4. 실행 방법

1) bash script_file.sh

  • 스크립트 파일에 실행 권한 추가 불필요
  • 명령 행에서 script_file.sh 다음에 인수 추가 가능
  • 서브 쉘을 새로 생성하여 스크립트 실행
bash script_file.sh

2) /script_file.sh

  • 스크립트 파일에 실행 권한 추가 필요
  • PATH 환경 변수에 설정된 디렉토리에서 스크립트 파일을 찾음
  • 스크립트 파일의 첫 행에서 #! 다음에 해석기 (/bin/bash)를 지정
  • 서브 쉘을 새로 생성하여 스크립트를 실행
chmod u+x script_file.sh    # 스크립트 파일 실행 권한 추가
./script_file.sh     # 파일명이 script_file.sh인 스크립트 실행

3) source script_file.sh 또는 . script_file.sh (동일한 기능: 소싱)

  • 소싱하는 것 (shell script를 실행하는 것과는 조금 다름)
    • sourcing vs executing:
  • 현재 사용 중인 쉘 환경 안에서 스크립트 파일을 소하는 명령
  • 쉘 스크립트를 현재 쉘 환경에서 실행시키므로 쉘 스크립트에서 변수값을 변경시킬 때 그 변수의 값이 쉘에서 계속 유효

4) Sourcing과 Bash의 차이

source script_file.sh
. script_file.sh

 

  역할 사용 셸 환경 변수 유효성 cd로 인한 경로 유지
source 스크립트 파일 실행 현재 셸 파일 바깥에서 접근 가능 파일 바깥에서 유지됨
bash 스크립트 파일 실행 새 셸 파일 바깥에서 접근 불가 파일 바깥에서 유지 않된

 

참조

  1. https://en.wikipedia.org/wiki/Shebang_(Unix)
  2. https://velog.io/@wlsrud/shell-script-조건문-if-case-esac-문-binsh문-반복문-For문과-While의-차이 
  3. https://m.blog.naver.com/hj_kim97/222586947801
  4. https://velog.io/@gudrmsglgl/Shell-script-에-대해-알아보자
  5. (특수 변수)https://sa2da-sac.tistory.com/18  
  6. (작성 방법) https://blog.naver.com/kimwlals/220710965435 
  7.  

'Shell' 카테고리의 다른 글

Shell Script 함수 만들기  (0) 2024.04.30
Shell 변수 (variable)  (0) 2024.04.30
case문 사용법 (shell script)  (0) 2024.04.30
readonly (shell script 명령어)  (0) 2024.04.29
if문 사용법 (shell script)  (0) 2024.04.29