- Published on
2025.10.18
[모두의 리눅스] - 15. 셸 스크립트 작성
15.1. 셸 스크립트란?
셸 스크립트: 셸에서 실행될 커맨드 라인을 입력해 놓은 파일
- 재사용할 수 있음
- 공유할 수 있음
- 실수 방지
15.3. 셸 스크립트 작성
셸 스크립트는 Vim 등의 텍스트 에디터로 입력하면 된다.
$ du -h ~ | tail -n 1
du는 디렉터리 내 파일 사용량을 출력하는 명령어로, ~로 홈 디렉터리의 사용량을 출력하며, 홈 디렉터리 전체의 사용량만 출력하기 위해 tail로 마지막 한 행만 출력.
Vim으로 셸 스크립트 작성 예시
$ vim homesize.sh
#!/bin/bash
du -h ~ | tail -n 1
vim 종료 후, 파일에 실행 권한을 부여하고 실행한다. 파일을 실행할 때 현재 디렉터리 위치를 알리기 위해 ./를 붙인다.
$ chmod +x homesize.sh
$ ./homesize.sh
#!로 시작하는 첫 번째 행을 셔뱅(shebang)이라 한다.
15.4. 셸 스크립트 실행 형식
셔뱅
#!가 있으면 그 뒤에 적힌 명령어를 실행한다. #!/bin/bash는 해당 셸 스크립트는 /bin/bash를 사용한다고 명시적으로 선언한 것.
셸에서는 #으로 시작하는 행을 주석으로 간주하므로 셔뱅도 주석으로 간주.
source 명령어: 파일에서 명령어를 읽어서 실행
source는 지정한 파일 안의 커맨드 라인을 셸에 직접 입력한 것과 같이 실행. 셔뱅으로 지정한 셸이 아닌 현재 셸이 사용되며, 파일을 직접 실행하는 것이 아니라 실행 권한을 부여할 필요가 없음.
.도 source와 동일하게 동작함.
파일 이름으로 직접 실행하면 서브 셸에서 실행되어 환경 변수는 사용할 수 있지만 별명은 사용할 수 없음.
다음과 같은 이유로 셸 스크립트를 사용할 때는 source를 쓰기보다 파일 이름으로 실행하는 것이 좋음
- 셔뱅에 지정한 셸에서 실행되므로 현재 사용자가 사용하는 셸에 영향을 받지 않음
- source를 사용하면 현재 셸의 환경에 따라 실행이 안되거나, 현재 셸의 변숫값, 별명 등이 바뀔 수 있음
15.5. 셸 스크립트 배치
셸 스크립트를 이름만으로 실행하려면 검색 경로에 등록된 디렉터리 내에 있어야 함. 검색 경로는 환경 변수 PATH에서 확인할 수 있으며, 검색 경로에 없다면 상대 경로나 절대 경로로 파일의 위치를 지정해줘야 함.
셸 스크립트 배치용 디렉터리
예시로 ~/bin이라는 디렉터리를 만들고 셸 스크립트를 옮긴다. 검색경로에 ~/bin을 추가한다. 설정을 적용하려면 재로그인.
적용이 완료되면 이름만 입력해도 셸 스크립트를 실행할 수 있음.
source 명령어와 패스
source에 이름으로 셸 스크립트를 지정하면 의도치 않은 스크립트를 실행할 가능성이 있어 상대 경로나 절대 경로를 사용하는 것이 좋음.
혹은 PATH에 등록된 경로에서 파일을 찾지 않도록 shopt 명령어로 sourcepath 옵션을 비활성화할 수도 있음.
$ shopt -u sourcepath # 검색 경로에서 파일을 찾지 않도록 설정