- Today
- Total
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- 재능이의 돈버는 일기
- StresslessLife
- K_JIN2SM
- 소소한 일상
- My Life Style & Memory a Box
- Blog's generation
- 공감 스토리
- 취객의 프로그래밍 연구실
- Love Me
- Dream Archive
- 세상에 발자취를 남기다 by kongmingu
- hanglesoul
- 카마의 IT 초행길
- 느리게.
- 미친듯이 즐겨보자..
- Joo studio
- Gonna be insane
- 악 다 날아갔어!! 갇대밋! 왓더...
- xopowo05
- 맑은공기희망운동
- 엔지니어 독립운동
- 혁준 블로그
- Simple in Complex with Simple
- 무의식이 의식을 지배한다
드럼치는 프로그래머
[유닉스실습] 6장 C셸 junk 프로그램 실행 및 분석 본문
1. “junk" 예제 스크립트 실행
..“.junk" 디렉토리 내용 표시
..junk를 실행할 파일들 표시
..두 파일에 junk 실행
..“.junk" 디렉토리 내용 표시
..“.junk" 디렉토리 내 파일 제거
..".junk" 디렉토리 내용 표시
..없는 옵션을 시도함
..error 메시지 출력
(HERE DOCUMENT)
▶ TEST
첫 번째 Test에서 junk로 test1.csh 파일을 실행 후 junk -p test2.csh를 하게 되면 프로그램은 2개의 인자를 인식하여 명령인자가 2개가 됩니다.
그럼 첫 번재 인자 -p 옵션이 switch-case제어문에서 purgeFlag = 1을 실행 후 breaksw를 만나서 switch-case문이 끝나면서 purgeFlag가 1이 되고 다시 foreach문이 실행됩니다. (명령인자가 2개이기 때문에 2번 반복) 그리고 2번째 인자가 test2.csh이므로 default가 실행되고 fileFlag = 1 이 되고 fileList에 추가되면서 반복문이 끝이 납니다.
옵션처리에서 purgeFlag의 if조건제어문을 먼저 만나서 ".junk“ 디렉토리의 내용이 제거되고 exit 0을 만나서 스크립트가 종료됩니다.
그러므로 “.junk" 디렉토리 안에 파일은 사라집니다.
두 번째 Test에서 junk로 test3.csh 파일을 실행 후 junk menu.sh -p를 하게 되면 이 프로그램 역시 2개의 인자를 인식하여 명령인자가 2개가 됩니다.
첫 번째 인자는 -p, -l, -* 옵션이 아니므로 switch-case제어문에서 default문을 만나서 fileFlag = 1이 되고 fileList에 menu.sh가 추가됩니다.
두 번째 인자 -z 옵션으로 인해서 goto error문을 만나서 error에대한 HEAR DOCUMENT를 만나서 에러문을 출력하고 exit 1로 종료됩니다.
그러므로 “.junk” 디렉토리 안에 파일은 삭제되지 않고 남아있는 것입니다.
2. "junk" 예제 스크립트 소스
3. “junk” 예제 스크립트 분석
#!/bin/csh
# junk script
# 저자 : Graham Glass
# 9/25/91
#
# 변수의 초기화
#set fileList = ()
# 모든 명시된 파일의 목록set listFlag = 0
# "-l" 옵션이 명시되면 1로 설정set purgeFlag = 0
# "-p" 옵션이 사용되면 1set fileFlag = 0
# 적어도 1 파일이 명시되면 1set junk = ~/.junk
# junk 디렉토리
#
# 명령줄 파싱
#
foreach arg ($*)
# 모든 명령 줄 인수의 목록들이 arg라는 단어리스트에 저장하고 인수 개수만큼 반복
switch ($arg) # 해당 명령인자 $arg에 따라 case문 결정
case "-p": # -p 옵션이라면 실행
set purgeFlag = 1 # 변수 purgeFlag에 1을 대입
breaksw # breaksw문으로 switch-case문 종료
case "-l": # -l 옵션이라면 실행
set listFlag = 1 # 변수 listFlag에 1을 대입
breaksw # breaksw문으로 switch-case문 종료
case -*: # -p, -l 옵션을 제외한 나머지가 입력된다면 실행
echo $arg is an illegal option # echo문으로 문장 출력
goto error # error라고 명명된 레이블로 점프
breaksw # breaksw문으로 switch-case문 종료
default: # 만약 파일의 이름이 입력된다면 실행
set fileFlag = 1 # 변수 fileFlag에 1을 대입
set fileList = ($fileList $arg) # 파일이름을 리스트에 추가
breaksw # breaksw문으로 switch-case문 종료
endsw # swich-case 제어문 종료
end # foreach 제어문 종료
#
#
# 너무 옵션이 많은가 조사
# # 연산식의 결과는 내정명령어 @ 사용
@ total = $listFlag + $purgeFlag + $fileFlag # 변수들을 연산하여 total 변수에 저장
if ($total != 1) goro error # 만약 total 변수가 1이 아니라면 실행
#
# junk 디렉토리가 없으면, 이를 생성
#
if (!(-e $junk)) then # 만약 .junk 디렉토리가 없다면 실행
'mkdir' $junk # .junk 디렉토리 mkdir로 생성
endif # if 제어문 종료
#
#
#
#
# 옵션 처리
#
if ($listFlag) then # 변수 listFlag의 값이 1이라면 if제어문 실행
'ls' -lgF $junk # junk 디렉토리 안의 파일나열
exit 0 # 스크립트 정상종료
endif # if제어문 종료
#
if ($purgeFlag) then # 변수 purgeFlag의 값이 1이라면 if제어문 실행
'rm' $junk/* # junk 디렉토리 내용 제거
exit 0 # 스크립트 정상종료
endif # if제어문 종료
#
if ($fileFlag) then # 변수 fileFlag의 값이 1이라면 if제어문 실행
'mv' $fileList $junk # 파일을 junk 디렉토리로 이동 (일명 휴지통)
exit 0 # 스크립트 정상종료
endif # if제어문 종료
#
exit 0 # 스크립트 정상종료
#
# 에러 메시지 표시 후에 종료
error: # goto문 레이블
cat << ENDOFTEXT # 다음 ENDOFTEXT 나올때까지의 내용이 표준입력이 된다.
Dera $USER, the usage of junk is as follows:
junk -p means "purge all files"
junk -l means "list junked files"
junk <list of files> to junk them
ENDOFTEXT # HERE DOCUMENT
exit 1 # 스크립트 비정상종료
'★─Multi Media > ☆─3학년 1학기' 카테고리의 다른 글
=============== 최 종 학 점 =============== (0) | 2008.10.16 |
---|---|
[C++ 프로그래밍] 컴퓨터 잡지관련 발표 - Wibro (0) | 2008.10.13 |
[알고리즘] 해쉬 함수를 이용한 검색 (1) | 2008.10.13 |
[마이크로프로세서 응용설계] 실습 AVR 하드웨어 회로도 (1) | 2008.10.13 |
[마이크로프로세서 응용설계] 실습자료 - 기말고사 (0) | 2008.10.13 |