박봉달의 개발생활
[프로그래밍:서버] UNIX #7 : 쉘 스크립트와 쉘 변수, 예약 변수 본문
안녕하세요!
박봉달입니다!
유닉스는 특히 서버에 많이 쓰이는 운영체제입니다
우리가 많이 쓰는 윈도우와는 다른 방식으로 구성되어있는데요,
오늘은 유닉스(Unix) 쉘 스크립트와 쉘 변수 에 대해서 알아보도록 하겠습니다!
1. 쉘 스크립트
* 스크립트
- 인터프리터라 불리는 다른 프로그램에 의해 실행되는 프로그램
- 자바 스크립트, Perl, 파이썬 등이 있음
- 최종 사용자가 응용 프로그램의 동작을 사용자의 요구에 맞게 수행
- 스크립트 언어라고도 하며 응용 프로그램과 독립하여 사용
* 셸 스크립트
- 셸이 실행하는 프로그램
- 유닉스 명령 + 셸이 제공하는 프로그램 구성 요소
- 셸 스크리브 파일 이름은 키워드나 에일리어스, 내장 명령과 같은 이름을 쓰지 않는 것이 바람직함
* 셸 명령 실행 순서
- 에일리어스 -> 키워드 -> 함수 -> 내장명령 -> 스크립트, 유틸리티 등 PATH 경로에 있는 실행 가능 파일
* vi 에디터로 편집
#!/bin/bash
printf "I love UNIX ! \n"
pwd
* 스크립트 실행방법
$bash test_shell.sh
I love UNIX!
/home/user1
$
* 파일을 직접 실행
$ chmod +x test_shell.sh
$ ./test_shell.sh
I love UNIX!
/home/user1
$
* exit[종료 상태]
- 스크립트의 종료
- 쉘 스크립트 문서의 끝
- 기능 : 종료 상태를 $? 변수에 저장
* 쉘 스크립트 구성 요소
* 스크립트 파일의 구성 요소 : #!
- 파일의 가장 처음에 위치
- 스크립트를 실행할 프로그램 지정
- 각 셸마다 제공하는 문법이 조금씩 다르므로 실행할 셸을 지정해주어야 올바로 실행됨
- 셸이 아닌, 다른 실행 가능한 명령을 지정해주어도 됨
* 스크립트 파일의 구성 요소 : #
- 주석(comment)
- 프로그램에 대한 설명
- 행 전체 또는 열에 대한 설명
* 스크립트 파일의 구성 요소 : 셸 명령
- 셸이 실행할 수 있는 모든 명령어 사용 가능
- 여러 명령을 반복 수행해야할 때 스크립트 파일로 저장하여 실행
* 스크립트 파일의 구성 요소 : 셸 프로그램
- 각 셸이 제공하는 프로그램을 위한 구문
- 셸 변수, 인자처리, 각종 연산자, 제어문 등 포함
* 셸 프로그래밍 절차
$ touch shell_script_practice.sh // 파일 생성
$ vim shell_script_practice.sh // 파일 편집기로 파일 열기
스크립트 상단에 #!/bin/bash 추가
내용 입력 후 저장하고 빠져나옴
$ chmod +x shell_script_practice.sh // 실행 권한 부여
$ ./shell_script_practice.sh // 스크립트 파일 실행
2. 셸 변수
* 단일 변수
- 쉘 변수는 대소문자를 구분함
- =를 이용해서 선언하고 $를 이용하여 사용
- {}는 parameter substitution으로 $와 함께 감싼 부분에 변수를 대입
- "" 로 감싸서 사용하면 더 안전
- =는 공백 없이 붙여서 써야 함
- 지역 변수에는 local 을 붙임
- 변수명 앞에 export를 붙여주면 환경변수로 설정되어 자식 스크립트에서 사용가능
- 환경 변수 사용시, 예약 변수에 주의 필요
- 환경 변수 정의 : .bash_profile 에서 정의
* 변수의 타입 지정
- Bash 변수는 타입을 구분하지 않고 기본적으로 문자열
- 문맥에 따라서 연산 처리
- declare, typeset 타입 지정 명령 지원
- 코멘트에 있는 다른 문법 사용을 추천
* 문법
-a : 변수를 배열로 취급
-f : 함수 명과 정의 목록 출력
-F : 함수명 목록만 출력
-i : 정수형 타입 변수 만들기
-r : 읽기 전용 변수 만들기
-x : 서브 쉘에 변수명을 전달
* 예약 변수
- HOME : 사용자의 홈 디렉토리
- PATH : 실행 파일을 찾을 경로
- LANG : 프로그램 사용 시 기본 지원되는 언어
- PWD : 사용자의 현재 작업중인 디렉토리
- FUNCNAME : 현재 함수 이름
- SECONDS : 스크립트가 실행된 초 단위 시간
- SHLVL : 쉘 레벨
- SHELL : 로그인해서 사용하는 쉘
- PPID : 부모 프로세스의 PID
- BASH : BASH 실행 파일 경로
- BASH_ENV : 스크립트 실행 시 BASH 시작 파일을 읽을 위치 변수
- BASH_VERSION : 설치된 BASH 버전
- BASH_VERSINFO : 배열로 상세정보 제공
- MAIL : 메일 보관 경로
- MAINCHECK : 메일 확인 시간
- OSTYPE : 운영체제 종류
- TERM : 로긴 터미널 타입
- HOSTNAME : 호스트 이름
- HOSTTYPE : 시스템 하드웨어 종류
- MACHTYPE : 머신 종류
- LOGNAME : 로그인 이름
- UID : 사용자 UID
- EUID : su 명령에서 사용하는 사용자의 유효 아이디 값
- USER : 사용자의 이름
- USERNAME : 사용자 이름
- GROUPS : 사용자 그룹
- HISTFILE : history 파일 경로
- HISTFILESIZE : history 파일 크기
- HISTSIZE : history 저장 개수
- HISTCONTROL : 중복되는 명령에 대한 기록 유무
- DISPLAY : X 디스플레이 이름
- IFS : 입력 필드 구분자
- VISUAL : VISUAL 편집기 이름
- EDITOR : 기본 편집기 이름
- COLUMNS : 현재 터미널이나 윈도우 터미널의 컬럼 수
- LINES : 터미널의 라인 수
- LS_COLORS : ls 명령의 색상 관련 옵션
- PS1 : 기본 프롬프트 변수
- PS2 : 보조 프롬프트 변수
- PS3 : 쉘 스크립트에서 select 사용시 프롬프트 변수
- PS4 : 쉘 스크립트 디버깅 모드의 프롬프트 변수
- TMOUT : 0이면 제한이 없으며 time 시간 지정시 지정한 시간 이후 로그아웃
* 위치 매개 변수
- $0 : 실행된 스크립트 이름
- $1 : 순서대로 번호 부여. 10번째부터는 {} 감싸줘야함
- $* : 전체 인자 값
- $@ : 전체 인자 값
- $# : 매개변수 총 개수
* 특수 매개 변수
- $$ : 현재 스크립트의 PID
- $? : 최근 실행된 명령어 종료 상태
- $! : 최근 실행한 백그라운드 명령의 PID
- $- : 현재 옵션 플래그
- $_ : 지난 명령의 마지막 인자로 설정된 특수 변수
이상으로 유닉스 포스팅을 마칩니다!
정리한 내용이 나중에 쓰이길 바라며 포스트를 마칩니다 :)
'IT > UNIX' 카테고리의 다른 글
[프로그래밍:서버] UNIX #6 : 유닉스 셸의 종류와 기능, 환경 변수 (0) | 2021.01.16 |
---|---|
[프로그래밍:서버] UNIX #5 : vi 에디터 개요와 활용 / 명령어 (0) | 2021.01.13 |
[프로그래밍:서버] UNIX #4: 디렉토리 생성/삭제 (0) | 2021.01.05 |
[프로그래밍:서버] UNIX #3 : 유닉스 디렉토리의 개요 (0) | 2021.01.04 |
[프로그래밍:서버] UNIX #2 : 퍼미션/소유자 관리 (0) | 2020.12.30 |