정보공간_1

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

IT 놀이터/Elite Member Tech & Talk

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

알 수 없는 사용자 2014. 11. 20. 18:49

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

 

오늘은 변수와, 본 쉘, 배시 쉘 문법 구조에 대해 포스팅 하도록 하겠습니다.

 

1. 변수

1.1 전역 변수(환경 변수)

전역 변수 또는 환경 변수들은 모든 쉘에서 사용할 수 있으며, env 명령과 printerenv 명령을 사용하면 환경 변수들을 출력해볼 수 있습니다. 이 두 명령은 CentOS 리눅스의 coreutils 패키지에 포함되어 있습니다.

 

 

 

1.2 지역 변수

 지역 변수는 현재의 쉘에서만 사용할 수 있습니다. set 명령을 사용하면 환경 변수를 포함하여 모든 변수들과 함수들의 목록을 정렬해서 표시합니다.

 

 

 

1.3 변수 분류 및 생성

(1) 변수 분류

 - 문자열 변수

 - 정수형 변수

 - 상수형 변수

 - 배열 변수

(2) 변수 생성

 변수들은 기본적으로 대문자로 생성합니다. 지역 변수를 소문자로 생성할 때도 있지만, 혼란을 줄이기 위해 대문자로 생성하는 것을 추천합니다.

 변수명에 숫자를 포함가능하지만, 숫자로 시작할 수 없습니다.

 

 

 

 '=' 앞 뒤로 공백이 없어야 합니다. 그리고 변수를 제거하려면 unset  명령을 사용합니다.

 

 

 

 

(3) 지역변수를 환경 변수로 만들기

 현재 쉘에서만 사용할 수 있는 지역변수들을 자식 프로세스들이 사용할 수 있도록 하려면 환경변수로 변경해야 합니다. export 명령을 사용하면 지역변수를 환경변수로 변경할 수 있습니다.

 

 

 

1.4 예약 변수

 (1) 본 쉘 예약 변수

본 쉘 변수명 

 정의

 CDPATH

 cd 빌트인 명령을 검색하기 위해 사용되는 콜론(:)으로 분리도니 디렉터리 목록

 HOME

 현재 유저의 홈디렉터리. 이 변수의 값은 ~(틸드)로도 사용됩니다.

 IFS

 필드 분리자의 문자 목록으로서 각 단어별로 분리할 때 사용할 필드 분리자를 지정합니다.

 MAIL

 이 변수에 파일명을 지정하여 수신한 메일이 저장된 파일을 할당합니다.

 MAILPATH

 메일이 왔는지 점검하기 위해 사용하는 경로명을 콜론(:)으로 구분하여 설정합니다.

 OPTARG

 getopts 내장명령에 의해 처리된 마지막 옵션 인수의 값

 OPTIND

 getopts 내장명령에 의해 처리된 마지막 옵션 인수의 인덱스 

 PATH

 쉘이 명령을 찾아볼 디렉터리 목록을 콜론(:)으로 구분하여 지정합니다.

 PS1

 주 프롬프트 문자열로서 기본값으로 "'[\u@\h \W]\$ '"입니다 (\ 역슬래쉬)

 PS2

 2차 프롬프트 문자열로서 기본값으로 "'>'" 입니다

 

 (2) 배시 쉘 예약 변수 - 너무 많아서 앞부분만 정리했습니다. 나머지는 김태용의 리눅스 쉘스크립트 프로그래밍 입문을 참고하면 알 수 있습니다.

 

 배시 쉘 변수명

 정의

 auto_resume

 쉘이 사용자와 작업 제어에 대한 상호 대화를 어떻게 할 것인지 관리합니다.

 BASH

 배시의 현재 인스턴스를 실행하는 전체 경로명이 할당됩니다.

 BASH_ENV

 쉘 스크립트를 실행하기 위해 배시가 호출되었을 때 변수가 설정된다면 값이 확장되고 스크립틀 실행하기 이전에 읽기 위하여 시작 파일의 이름으로 사용됩니다.

 BASH_VERSION

 배시의 현재 인스턴스의 버전 번호가 할당됩니다.

 BASH_VERSINFO

 배시 인스턴스의 버전 정보를 가지고 있는 읽기만 가능한 배열 변수입니다.

 COLUMNS

 select 빌트인 명령으로 설정된 터미널의 너비를 가지는 변수입니다.

 COMP_CWORD

 현재 커서 위치를 포함하고 있는 단어의 인덱스

 COMP_LINE

 현재 명령라인

 

1.5 특수 파라미터 변수

 

특수 파라미터 변수 

 정의 

 $*

 이 파라미터 변수는 1부터 시작하는 위치 파라미터의 확장이며, 큰따옴표로 구분하고, IFS 특수 변수의 첫 번째 문자로 구분되는 각 파라미터의 값으로 하나의 단어를 확장하며, 전체 파라미터 값을 가지고 있습니다. 만약 IFS가 널이거나 해제되어 있으면 파라미터는 스페이스로 구분됩니다.

 $@

 이 파라미터 변수는 1부터 시작하는 위치 파라미터의 확장이며, 큰 따옴표로 확장되면 각 파라미터는 하나의 구분 단어로 확장되고, 전체 파라미터값을 가집니다.

 $#

 이 파라미터 변수는 십진수의 위치 파라미터 전체 개수를 의미합니다.

 $?

 가장 최근에 실행된 포그라운드 파이프라인의 종료상태를 가지고 있습니다.

 $-

 실행하자마자 set 내장명령을 통해 또는 쉘 자체에 의해(예를 들어, -i 플래그) 설정된 현재 옵션 플래그로 확장합니다.

 $$

 현재 쉘의 프로세스 ID를 가지고 있습니다.

 $!

 가장 최근에 백그라운드로 실행된 프로세스의 ID를 가지고 있습니다.

 $0

 쉘 또는 쉘 스크립트의 이름을 가지고 있습니다.

 $_

 이 변수는 쉘이 시작되면 설정되는데, 아규먼트 목록을 사용하여 실행된 쉘 스크립트의 절대경로를 가지고 있습니다.

 

2. 본 쉘 - 필수적인 부분만 선별해서 정리했습니다.

2.1 본 쉘 shbang 라인

- 본 쉘용 스크립트를 실행하기 위해서는 쉘 스크립트의 첫 번째 라인에 #!/bin/sh 를 입력해 주어서 커널에 게 이 파일은 본 쉘 스크립트라고 인지하도록 해야 합니다.

2.2 와일드 카드

- *,?,[] 는 파일명 확장을 위해 사용되고 <,>,2>,>>,|(OR) 문자들은 표준 I/O를 위해 사용됩니다. 문자들이 인터프리터에 의해 해석되지 않도록 인용부호(',") 로 감싸주어야 합니다.

 

 

 

2.3 변수로부터 값읽기

변수로부터 값을 읽어오기 위해서는 변수명 앞에 '$' 문자를 붙여주면 됩니다.

 

 

 

2.4 사용자 입력 읽기

read 명령은 사용자의 입력을 읽고 read 명령의 오른쪽에 적는 변수에 사용자 입력값을 할당합니다.

 

 

 

 

2.5 배열

 본 쉘은 배열을 지원하며, 단어 목록은 빌트인 set 명령을 사용하여 생성할 수 있고, 단어들은 각 위치 순서에 할당된다. 9개까지의 위치파라미터를 사용할 수 있습니다.

 

 

 

2.6 명령 치환

 리눅스 명령의 결과를 변수로 할당하거나 문자열로 사용하려면 (' ') 를 사용하여 명령을 감싸주어야 합니다.

 

 

 

 

 

2.7 조건문

 if~then 문장을 사용하며, if문 끝에는 if문이 끝이라고 알려주는 fi를 적어 주어야 합니다.

 

 

 

 

 

 

2.7 루프문

 루프문에는 while, until, for 3가지 종류가 있습니다.

(1) while

while 루프는 뒤에 오는 명령이나 표현식이 true이면 계속해서 do와 done 사이의 문장을 실행합니다.

 

 

 

 

 (2) until

 

 

 

 

 (3) for

 

 

 

 2.9 함수

 본 쉘은 함수로 쉘 코드의 섹션을 정의할 수 있으며, 이름을 정할 수 있습니다. 함수의 이름을 실행하면 함수가 호출됩니다.

 

 

 

 

 

지금까지 변수와 본쉘의 문법 구조에 대해서 알아보았습니다.

 

다음시간에는 배시 쉘 문법 구조에 대해 포스팅하도록 하겠습니다.