정보공간_1

[6기 강북 윤덕진] 리눅스 쉘 스크립트 프로그래밍 #4 본문

IT 놀이터/Elite Member Tech & Talk

[6기 강북 윤덕진] 리눅스 쉘 스크립트 프로그래밍 #4

알 수 없는 사용자 2014. 11. 28. 23:02

안녕하십니까? 강북 멤버십 23-1기 윤덕진입니다.

 

앞부분에서 본 쉘의 문법과 구조를 알아봤다면 오늘은 배시 쉘 문법과 구조에 대해서 포스팅하도록 하겠습니다.

 

1. 배시 쉘의 시작

 배시 쉘을 로그인 쉘로 사용한다면 쉘 프롬프트가 화면에 보여지기 전에 다음과 같은 프로세스를 진행한다.

 

init

.

.

getty ----->login->password--->bash

 

 리눅스가 부팅되면 init이라는 첫 번째 프로세스가 생성됩니다. 이 때 이 프로세스의 프로세스 ID는 1번이 됩니다. 그리고 자식 프로세스로 getty 프로세스를 실행하는데, 이 프로세스를 사용하여 터미널 포트를 오픈하고 모니터에 로그인 프롬프트를 보여줍니다. password 까지 입력이 끝나면 bash 프로세스는 /etc/profile 시스템 파일을 찾아서 명령라인에서 실행하게 됩니다.

 

2. 배시 쉘 환경

2.1 배시 쉘 초기화 파일들

(1) /etc/profile

 /etc/profile 파일은 유저가 로그인했을 때 가장 먼저 읽어들이는 시스템 초기화 파일입니다.

 

 

USER 변수는 유저명으로 할당됩니다.

LOGNAME 변수는 앞서 설정한 USER 변수로 할당됩니다.

MAIL 변수는 USER의 메일이 저장된 메일 스풀러 경로가 할당됩니다.

HOSTNAME 변수는 유저의 호스트 머신 이름이 할당됩니다.

HISTSIZE 변수는 1000으로 설정되는데, 이 변수는 쉘 메모리에 저장되는 명령 히스토리 목록수를 말하며 쉘이 종료되면 히스토리 파일에 저장됩니다.

 

(2) .bash_profile

유저의 홈디렉터리를 보면 디폴트로 .bash_profile 파일을 가지고 있습니다. 이 파일은 /etc/profle 파일을 실행한 다음 실행하게 되어 있습니다. 순서는 .bash_profile, .bash_login, .profile 순입니다. 만약 .bashrc도 존재한다면 같이 실행하게 됩니다.

 

  

 

 

(3) .bashrc

앨리아스 설정과 /etc/bashrc 파일이 존재하면 같이 실행하도록 구성되어 있습니다. 앨리아스란, 긴 명령을 짧은 명령으로 대체하여 보다 간결하게 명령을 수행하기 위한 것입니다. 내용 중에서 alias rm='rm -i' 라고 적혀 있는데, 이것의 의미는 rm 명령을 실행할 때 항상 -i 옵션을 수행하도록 하는 것입니다.

 

 

 

(4) /etc/bashrc

시스템 전역 함수들과 앨리아스들을 설정하고 있습니다.

 

 

 

3. 배시 쉘 옵션 설정을 위한 set, shopt 명령

(1) set

set 명령어는 특수한 빌트인 내장 옵션들을 켜고 끄는 역할을 합니다.

아래 표는 set 옵션 중 몇가지를 정리해보았습니다.

 

 set 명령 옵션

짧은 옵션 

의미 

 allexport

 -a

 설정을 해제할 때까지 뒤이어서 나올 명령의 환경으로 export 하기 위해 수정 또는 생성할 변수를 자동으로 표기합니다.

 braceexpand

 -B

브레이스 확장이 가능하며 기본값으로 설정되어 있습니다. 

 emacs

 

 이맥스 스타일의 명령행 편집 인터페이스를 사용하며, 기본값으로 설정되어 있습니다.

 errexit

 -e

 명령이 0 아닌 상태값을 갖고 종료하면 즉시 종료합니다. 만약 실패한 명령이 util 또는 while 루프의 일부, if 문의 일부, &&의 일부, || 목록의 일부이거나 또는 명령의 반환값이 !로 반전되면 종료하지 않습니다.

 histexpand

 -H

 ! 스타일의 히스토리 치환을 사용합니다. 쉘이 대화형 모드이면 기본으로 켜지는 플래그 입니다.

 history

 

 명령 라인 히스토리를 가능하게 설정하며, 기본값으로 설정되어 있습니다.

 ignoreeof

 

 쉘을 빠져나오기 위해 Ctrl-d 를 눌러 EOF하지 못하도록 합니다. 이때에는 exit 명령을 사용해야 한다. 쉘 명령 IGNOREEOF=10 을 실행한 것과 같은 효과를 발휘합니다.

 keyword

 -k

 명령을 위한 환경에서 키워드 아큐먼트를 배치합니다.

 interactive-comments

 

 인터렉티브 쉘에서 이 옵션을 사용하지 않으면 # 주석을 사용할 수 없습니다. 기본값으로 설정되어 있습니다.

 

(2) shopt

shopt 명령은 배시 쉘에서 사용되는 set 명령으로서 새로운 버전의 쉘 옵션 내장명령어입니다. shopt 명령은 -p 옵션을 사용하여 모든 옵션들을 출력해 볼 수 있으며, -u 옵션을 사용하여 옵션 설정을 off할 수 있고, -s 옵션을 사용하여 on 할 수 있다.

 

shopt 옵션

의미 

 cdable_vars

 이 변수를 설정하면 cd 내장명령의 인수로 디렉터리가 아닐 때 이동하고자 하는 디렉터리를 값으로 갖고 있는 변수 이름으로 간주합니다.

 cdspell

 cd 명령에서 디렉터리명 스펠리의 작은 에러를 교정합니다. 교환문자, 빠진문자 그리고 너무 많은 문자를 체크하는데, 교정이 되면 교정된 경로가 프린트되고 명령을 처리합니다. 단, 인터렉티브 쉘에서만 사용됩니다.

 checkhash

 배시는 명령을 실행하기 전에 존재하는 해시 테이블에 명령이 있는지 체크합니다. 만약 명령이 존재하지 않으면 일반 경로 검색을 수행합니다.

 checkwinsize

 배시는 각 명령 다음에 윈도우 사이즈를 체크하고 필요하다면 LINES와 COLUMNS 변수의 값을 업데이트 합니다.

 cmdhist

 배시는 동일한 히스토리 엔트리에서 다중라인 명령의 모든 라인을 저장하려고 합니다. 이 옵션을 사용하여 다중 라인 명령을 쉽게 재편집할 수 있습니다.

 dotglob

 배시는 파일명 확장 결과에서 dot(.)으로 시작하는 파일명을 포함합니다.

 execfail

 비대형화 쉘은 exec 명령을 위한 아규먼트로 지정한 파일을 실행할 수 없으면 종료하지 못할 것이다. 대화형 쉘은 exec 명령이 실패하면 종료하지 않습니다.

 expand_aliases

 앨리아스가 확장됩니다.

 extglob

 확장된 패터 매칭 특징이 가능합니다.

 

이상으로 배시 쉘 문법과 구조에 대한 포스팅을 마치도록 하겠습니다.

 

 

 감사합니다.

 

위 내용은 김태용의 리눅스 쉘 스크립트 프로그래밍 입문 에서 발췌하였습니다.