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를 실행하는 것과는 조금 다름)
- 현재 사용 중인 쉘 환경 안에서 스크립트 파일을 소싱하는 명령
- 쉘 스크립트를 현재 쉘 환경에서 실행시키므로 쉘 스크립트에서 변수값을 변경시킬 때 그 변수의 값이 쉘에서 계속 유효
4) Sourcing과 Bash의 차이
source script_file.sh
. script_file.sh
|
역할 |
사용 셸 |
환경 변수 유효성 |
cd로 인한 경로 유지 |
source |
스크립트 파일 실행 |
현재 셸 |
파일 바깥에서 접근 가능 |
파일 바깥에서 유지됨 |
bash |
스크립트 파일 실행 |
새 셸 |
파일 바깥에서 접근 불가 |
파일 바깥에서 유지 않된 |
참조
- https://en.wikipedia.org/wiki/Shebang_(Unix)
- https://velog.io/@wlsrud/shell-script-조건문-if-case-esac-문-binsh문-반복문-For문과-While의-차이
- https://m.blog.naver.com/hj_kim97/222586947801
- https://velog.io/@gudrmsglgl/Shell-script-에-대해-알아보자
- (특수 변수)https://sa2da-sac.tistory.com/18
- (작성 방법) https://blog.naver.com/kimwlals/220710965435
-