셸 스크립트
1.1 셸의 기본
- 셸은 사용자가 입력한 명령을 해석해 커널로 전달 or 커널의 처리 결과를 사용자에게 전달
1.1.1 CentOS의 bash 셸
- CentOS의 기본 셸은 bash=Bourne Shell을 기반으로 Korn Shell과 C Shell의 장점을 합친 것
- bash의 특징
Alias 기능(명령어 단축 기능)
History 기능
연산 기능
Job Control 기능
자동 이름 완성 기능(Tab)
프롬프트 제어 기능
명령 편집 기능
1.1.2 셸 명령문 처리 방법
- 셸 명령문은 명령문과 함께 여러 가지 옵션이나 인자를 사용할 수 있다.
(프롬프트) 명령어 [옵션...] [인자...]
# ls –l
# rm –rf /mydir
# find . / -name “*.conf”
1.1.3 환경변수
설정된 환경 변수는 echo $환경변수이름 형식으로 확인 가능
1.1.3.1 주요 환경변수
환경변수 | 설명 | 환경변수 | 설명 |
HOME | 현재 사용자의 홈 디렉터리 | PATH | 실행 파일을 찾는 디렉토리 경로 |
LANG | 기본 지원되는 언어 | PWD | 사용자의 현재 작업 디렉토리 |
TERM | 로그인 터미널 타입 | SHELL | 로그인해서 사용하는 셸 |
USER | 현재 사용자의 이름 | DISPLAY | X 디스플레이 이름 |
COLUMNS | 현재 터미널의 컬럼 수 | LINES | 현재 터미널 라인 수 |
PS1 | 1차 명령 프롬프트 변수 | PS2 | 2차 명령 프롬프트 (대개는 ‘>’) |
BASH | BASH 셸의 경로 | BASH_VERSION | bash 버전 |
HISTFILE | 히스토리 파일의 경로 | HISTSIZE | 히스토리 파일에 저장되는 개수 |
HOSTNAME | 호스트의 이름 | USERNAME | 현재 사용자 이름 |
LOGNAME | 로그인 이름 | LS_COLORS | ls 명령어의 확장자 색상 옵션 |
메일을 보관하는 경로 | OSTYPE | 운영체제 타입 |
1.1.3.2 환경변수 값 변경
환경변수 값을 변경하려면 export 환경변수=값 형식을 실행한다
그 외의 환경변수는 printenv 명령을 실행하면 되지만 안되는 것도 존재함
1.2 셸 스크립트 프로그래밍 실습
- 셸 스크립트는 C 언어와 유사한 방법으로 프로그래밍
- 변수, 반복문, 제어문 사용 가능
- 별도로 컴파일하지 않고 텍스트 파일 형태로 셸에서 바로 실행 가능
- 주로 vi 에디터나 gedit으로 작성
1.2.1 셸 스크립트 작성과 실행
- vi 파일명.sh 혹은 gedit 파일명.sh와 같은 형식으로 작성
- sh 파일명.sh로 실행가능
- 셸 스크립트 파일의 속성을 실행 가능으로 변경한 후 ./스크립트파일 명령으로도 실행가능
chmod +x 파일명으로 실행가능 속성 추가
,/스크립트파일에서 .은 현재 디렉터리를 의미하는데 현재 디렉터리가 $PATH의 환경변 수에 설정되어 있지 않기 때문. 일반적으로 명령이나 스크립트 이름을 입력하면 셸은 $PATH 환경변수에 설정된 디렉터리만 찾아본다.
1.2.2 변수
변수는 필요한 값을 계속 변경해서 저장하는 개념
셸 스크립트의 구조는 변경할 필요가 없는데 설정해야 하는 값이 상황에 따라 다르다면 변수에 필요한 값을 계속 바꿔가는 방법으로 프로그래밍 해서 다양한 상황에 대처할 수 있다.
1.2.2.1 변수의 기본
셸 스크립트에서는 변수를 사용하기 전에 미리 선언하지 않으며, 처음 변수에 값이 할당되면 자동으로 변수가 생성된다.
변수에 넣는 모든 값은 문자열로 취급. 숫자를 넣어도 문자로 취급.
변수 이름은 대소문자를 구분한다
변수를 대입할 때 ‘=’ 좌우에는 공백이 없어야 한다.
1.2.2.2 변수의 입력과 출력
‘$’라는 문자가 들어간 글자를 출력하려면 ‘’로 묶어주거나 앞에‘/’를 붙여야 한다. 또한 “”로 변수를 묶어줘도 되고 안 묶어도 된다.
#bar1.sh
#!/bin/sh
myvar=“Hi Woo”
echo $myvar
echo “$myvar”
echo ‘$myvar’
echo /$myvar
exit 0
#결과
sh var1.sh
Hi woo
Hi woo
$myvar
$myvar
1.2.2.3 숫자계산
변수에 넣은 값은 모두 문자로 취급하기 때문에 연산을 하려면 expr 키워드를 사용하면 된다
수식과 함께 `(역따음표)로 묶어줘야 한다.
괄호를 사용하려면 그 앞에 /(역슬래시)를 붙여줘야 한다.
+,-,/와 달리 *는 예외적으로 앞에 /를 붙여줘야 한다.
1.2.2.4 파라미터 변수
파라미터 변수는 $0, $1, $2 등의 형태를 갖는다. 이는 실행하는 명령의 부분 하나하나를 변수로 지정한다는 의미이다.