박봉달의 개발생활

[프로그래밍:서버] UNIX #7 : 쉘 스크립트와 쉘 변수, 예약 변수 본문

IT/UNIX

[프로그래밍:서버] UNIX #7 : 쉘 스크립트와 쉘 변수, 예약 변수

박봉달 2021. 1. 25. 00:25
728x90

안녕하세요!

박봉달입니다!

유닉스는 특히 서버에 많이 쓰이는 운영체제입니다

우리가 많이 쓰는 윈도우와는 다른 방식으로 구성되어있는데요,

오늘은 유닉스(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

- $- : 현재 옵션 플래그

- $_ : 지난 명령의 마지막 인자로 설정된 특수 변수


이상으로 유닉스 포스팅을 마칩니다!

정리한 내용이 나중에 쓰이길 바라며 포스트를 마칩니다 :)

728x90
반응형