http://www.suntraining.co.kr Korn shell programming yae_kim@suned.co.kr 썬교육사업부 Sun Microsystems Korea
Sun Microsystems 교육입과를환영합니다
Korn shell 프로그래밍과정진행과정 OBEJCT - UNIX shell 특징과 shell script 소개 - UNIX 기본명령어 review - Script 기본작성법과 debugging 방법 - 기본변수선언및로그인시마다반복되는환경파일개념및활용 - 특정문구나표현식을이용하여패턴뽑아내는 grep 명령활용 - grep에서발전한패턴추출및대체기능의 sed 명령활용 - data 추출의꽃, 레포트화시키는 nawk의활용
Korn shell 을활용한프로그래밍과정진행과정 OBEJCT - 쉘에서인식되어지는특수변수및특수기호들의활용 - 조건을이용한분기문사용 - 조건을이용한반복문사용 - 반복문제어기능을가진특수명령어 - korn shell 문법비교표를이용한프로그램역변환 - 작성프로그램 : 자동화 ftp 프로그램, 구구단, 집단메일발송, 시스템사용시간에따른요금추출, 메뉴프로그램작성, 호스트이름변경프로그램작성, 로또프로그램작성등
Module 1: UNIX Shells and Shell Scripts * unix 명령 review - 변수대체기능 : $ 변수대체 - 명령대체기능 : ` 명령 ` -process 구조확인 : pmap pid, pstack pid truss o filename command * exec 명령 : exec () 의반환코드를 ppid 코드이용하여제어 * 기본명령조합 ps f tail +2 sort n who tr s cut f2 d * 사용자로그인과정의환경파일 -/etc/profile ~/.profile ~/.kshrc ( 단, ~/.profile 에서미리선언 ) * 간단한휴지통프로그램작성
Module 1: UNIX Shells and Shell Scripts -shell 의특징 : 특수기호해석, 명령해석, 프로그래밍가능 ( 해석순서 : alias - 내장명령 - PATH 변수 옵션 인수 기호 ) -shell 의종류 : sh: 가장기본적인쉘 (/bin/sh) csh: 명령별명, 명령내역, 명령재실행, 파일이름완성지원 ksh: csh 의기능을가져가며문법은 sh 의문법동일 bash: LINUX 에서발전, 화살표키이용기능편리함 - 쉘프로그램실행 : fork(), exec() 호출로인한자식쉘이해석위해동작 -shell script 의적용 : 시스템 boot 시적용 script, 사용자 login 환경파일사용자목적에따른 script -script 개발을위한생각 : 전체작업에대한업무파악 몇번반복할작업인지생각 - data 전달방식에대해생각 ( 사용자입력등 )- 조건을이용한분기작업을생각 프로그램문장을제어할명령이나단계를고려할것
Module 2: Writing and Debugging Scripts -shell script : unix 명령들집합 ( 구조 : 순차, 분기, 루프 ) -shell script 실행방법들 : # chmod 744 filename ; filename # ksh filename # ksh x filename #../filename -#! : script 내부의명령해석쉘정의 -# : script 내부에서주석문처리 -script debugging : ksh x filename (script 내 set x 동일 ) ksh v filename (script 내 set v 동일 ) ksh f filename (script 내 set f 동일 )
Module 3: Shell Variables &Initialization Files * 변수선언 : - 기본변수문법 : 지역변수 ( 변수명 = 값 ) 환경변수 ( 변수명 = 값 ; export 변수명 ) - 특수변수예약 : $0, $1, ${10}, $*, $# 등이용 - 사용자정의변수선언 : read 변수명 * 변수확인 : echo $ 변수명, set, env * 미리예약된 ksh 변수 : HOME, PATH, PS1, PS2, PS3, PWD, SHELL * Quoting 문자 : 특수문자의의미상실문자 -\ : 바로뒤특수문자하나의미상실 - : 모든특수문자의미상실 - : 변수대체, 명령대체, \ 기능외의모든문자의미상실 * 산술연산방법 : -sh : expr 값 + 값 -ksh : expr 값 + 값, (( 변수 = 값 + 값 )), let 변수 = 값 + 값
Module 4: Regular Expressions and grep * 문법 : grep [-viw] 패턴파일명파일내패턴검색 * 다양한 grep 기능 : pkginfo grep I netscape 대소문자구분없슴 ps f grep vi pid 패턴제외 ps ef grep c wc 계산 grep iwroot /etc/passwd * 정규표현식 : ps ef grep ksh$ 라인끝이 ksh패턴 ls l grep ^- 라인시작이 인패턴 grep \$ /etc/init.d/nfs.server 특별의미죽임 grep [y-z] /etc/passwd 패턴범위지정 grep \<uucp\> /etc/passwd 단어패턴정의
Module 5: The sed Editor Sed : 파일의내용일부변경, 파일내용추출 sed 옵션 action 인수 files > outfile 유형 : sed -n 라인번호, 라인번호 p filename sed -n / 패턴 /p filename sed / 패턴 /d filename sed s/ 찾을패턴 / 변경패턴 /g filename sed -f 패턴파일명 filename
Module 6: The nawk Programming Language nawk: 패턴추출, 필드작업, report 작업, 프로그램기능 일반문법 : nawk 패턴 { action} inputfile 예 : date nawk {print $2,$3, $1 } 예 : who nawk /root/ {print $1 \t $NF} 예 : who nawk BEGIN { print 현재로그인한 \ 사람들의명단입니다. } ; {print $1} ; END { \ print 총 NR 명이로그인하고있습니다. } 예 : nawk BEGIN { FS= : ; OFS= \t } { print \ $1, $7 } END { print 시스템계정은총 NR 명 }
Module 6: The nawk Programming Language nawk: 패턴추출, 필드작업, report 작업, 프로그램기능 일반문법 : # nawk 패턴 { action} inputfile 예 : # nawk -f 패턴파일명 inputfile 참조 : # cat 패턴파일명 BEGIN { FS= : ; OFS= \t } {print $1, $7} END { print 시스템계정은총 NR 명 } 예 : # nawk BEGIN { count=0} /N[EOW] { print $0 \ ; count=count +1} END { print north count, \ count} data.file 예 : # nawk {printf %10s %5s \n, $2, $1 > \ outfile } data.file
Module 7: Conditionals 조건비교명령 : test 값비교연산자값상수비교 : [ 값 lt 값 ] 문자비교 : [ 값 = 값 ] 파일비교 : [ -f 파일명 ] 사용자입력값을미리지정하는특수문자 : << 키워드 분기문 : 한번조건을비교하여한번실행된다. if 조건비교명령 then 실행명령들 else 실행명령들 fi case 패턴값 in 패턴 ) 실행명령 ;; *) 실행명령 ;; esac
Module 8: Interactive script 스크립트작성시 i/o 를위한명령어들 Print : echo 와동일한명령어나추가의기능이더있다. 예 ) -n, --, \n, \b Read : 프로그램진행중사용자에게입력을요구하여입력값을변수값으로사용한다. 예 ) read 변수명발전 : Read 변수? 사용자입력요구시메세지 파일 i/o 변환문자 : 기본입력과출력방향을변환시킨다. 문법 : 명령어 i/o 변환문자파일명 i/o 변환문자 : >, >>, 2>, >&fd, exec fd> 파일명 exec fd <&- Here 문자 : <<
Module 9: loops 조건을검사하여조건이만족되는한반복수행프로그램 break : 루프문내에서루프의흐름을제어하여루프문을강제로종료한다. continue : 루프문내에서루프의흐름을제어하여루프문을강제로다시조건검사한다. shift : 불필요한인수의개수를줄이고자할때. for 변수 in 인수리스트 do 명령어들 done 인수리스트 : 1. 직접입력 2. 변수대체 3. 명령대체 4. $1 같은예약변수 5. 파일명
Module 9: Loops * while 조건명령 do 명령들 done * until 명령은 while 과똑같은문법이나조건이거짓을참으로생각 * PS3= 지시문 select 와함께쓰이는변수. Select 문장앞에서선언 ( select 는 ksh 의명령으로메뉴를표현해준다.) select 변수 in 인수리스트 do 명령어 done
Module10: Advanced variables,parameters and Argument list * ksh에서변수타입을지정하기 : typeset -옵션변수 typeset -i a a 변수는 integer 형의변수값만가짐 * ksh 에서 array 선언 : array 는기본이 string 임. 필요시정수선언 arrary_name[ 요소번호 ]= 값 { arrary_name[ 요소번호 ]} { arrary_name[*]} { #arrary_name[*]} unset arrary_name * Positional parameter 선언 : set ( 표준입력으로값받아들이기 ) set 값값값 echo $1 $2 $3
쉘프로그램작성시확인사항 1. 몇번실행을반복할작업인지고려 ( 분기문 반복문선택 ) 2. Data 전달값을고정시킬것인지, 프로그램실행시함께입력할것인지, 프로그램실행이후에사용자에게입력을요구할것인지고려 3. 순차적으로실행될필요한유닉스명령어를정확히인지할것 4. 프로그램을강제로종료시키는입력을받아들일것인지고려 5. 프로그램을로그인시마다적용할것인지를고려하여환경파일안에입력할지고려 6. 프로그램실행권한을고정시킬것인지결정할것
수고많으셨습니다 http://www.suntrai ning.co.kr