suyeonme
[Shell] Shell Script 작성하기_1 본문
셸스크립트란?
셸에서 실행될 커맨드라인을 입력해놓은 파일로, 셸에 의해 해석되기 때문에 어떤 셸을 사용하는지에 따라서 문법이 달라진다.
셸스크립트를 한번 작성하면 이후 비슷한 처리를 수행할 때 재사용할 수 있으며 다른사람에게 쉽게 공유할 수 있다.
sh vs bash
- sh는 bash보다 오래전 설계되어 기능이 적으며 배포판에 따라서 실체가 다르고 동작도 다르다.
- bash는 GNU 프로젝트에 의한 구현체 밖에 없으므로 어떤 운영체제에서도 동일하게 동작한다. 최근 리눅스에서는 bash가 기본으로 설치되어 bash 셸 스크립트의 호환성과 이식성이 매우 높다. 따라서 최근에는 bash기반의 셸스크립트를 주로 사용한다
셸스크립트 실행
셸 스크립트를 실행하는 방법으로 아래 두가지 방법이 있다.
- 셔뱅(shebang) 사용
- source 명령어 사용
./[파일명].sh # 파일 이름으로 실행
bash [파일명].sh # 셸의 인자로 지정하여 실행
source ./[파일명].sh # source 명령어로 실행
일반적으로는 셸스크립트 실행시 source 명령어 대신 파일 이름으로 실행하는 것이 좋다.
파일 이름으로 실행하는 것의 이점은 다음과 같다.
- 셔뱅에서 지정된 셸에서 실행되기 때문에 현재 사용자가 사용하는 셸에 영향을 받지 않는다.
- source 명령어 사용시, 현재 셸의 환경에 따라 실행이 안되기도 하고 현재 셸의 변숫값이나 별명을 바꿀 수있는 위험성이 있다.
셸 스크립트는 경로명/파일명.sh와같이 파일 앞에 검색 경로를 붙여서 실행한다. (검색 경로에 등록된 디렉터리에 있지 않으면 셸스크립트의 이름만으로 실행할 수 없다.)
검색 경로란, 셸에서 명령어를 실행할 때 명령어의 파일을 찾는 디렉터리로 which 또는 echo $PATH 명령어로 확인할 수 있다.
* 맥에서 셸 스크립트 실행시 Permisson Error가 난다면 sudo chmod 755 '파일명’ 으로 퍼미션을 부여하거나 슈퍼어드민으로 실행해야한다.
셔뱅(Shebang)
셸스크립트를 실행하면 리눅스 커널은 파일의 첫부분을 확인하는데 #!가 있으면 그 뒤에 적힌 명령어를 실행한다.
#!/bin/bash란 해당 셸 스크립트는 /bin/bash를 사용한다고 명시적으로 선언한 것으로, 파일명.sh 을 /bin/bash 파일명.sh로 확장하여 실행한다.
#!/bin/bash
셔뱅을 사용한 셸 스크립트는 다음의 순서로 사용한다.
# 1. 파일 생성
vi [파일명].sh
# 2. 커맨드라인 작성
#!/bin/bash
du -h ~ | tail -n 1
# 3. 실행 권한 부여
chmod +x [파일명].sh
# 4. 셸스크립트 실행
./[파일명].sh
Source 명령어 사용
source 명령어는 지정한 파일안의 커맨드라인을 마치 셸에서 직접 입력한 것과 동일하게 실행한다. 따라서 언제나 현재 사용중인 셸이 사용되므로 현재 설정된 셸 환경의 영향을 받는다.
source ./[파일명].sh
source 명령어 특징
- 셔뱅을 사용하지 않은 셸스크립트는 source 명령어로 실행할 수 있다.
- 현재 셸을 사용하기때문에 alias를 사용할 수 있다.
- 파일을 직접 실행하는 것이 아니기때문에 파일에 실행 권한을 부여할 필요가 없다.
- sh에서는 source 대신 dot(.)명령어가 source와 동일하게 동작한다.
- 배시의 설정파일을 실행하는 것처럼, 셸 설정을 현재 셸에 반영하는 경우 유용하다. (source ~/.bashrc)
셸스크립트 배치용 디렉터리 설정
작성한 셸스크립트를 검색 경로에 추가하면 어느 디렉터리에서나 파일명으로 실행할 수 있다.
$PATH에서 검색 경로에 해당하는 디렉터리는 콜론을 구분자로 설정한다. 따라서 해당 변수에 경로를 추가하면 검색 경로에 추가된다.
# 1. ~/bin 디렉터리 생성
mkdir ~/bin
# 2. 셸스크립트를 ~/bin 디렉터리로 이동
mv [파일명].sh ~/bin
# 3. 검색 경로에 ~/bin 추가
vi ~/.profile
PATH="$PATH:~/bin"
# 4. 설정 적용
source ~/.profile
# 5. 셸스크립트 실행
[파일명].sh
'프로그래밍👩🏻💻 > Shell' 카테고리의 다른 글
[Shell] Shell Script 작성하기_2 (1) | 2023.02.04 |
---|