Linux/SHELL  2006/09/08 16:23
					
				thegrendel (at) theriver.com
차례
- Part 1. 소개
 - 1. 왜 쉘 프로그래밍을 해야 하죠? 
- 2. #! 으로 시작하기
  - 2.1. 스크립트 실행하기 
- 2.2. 몸풀기 연습문제(Preliminary Exercises)
  
- 2.1. 스크립트 실행하기 
 
- 1. 왜 쉘 프로그래밍을 해야 하죠? 
 - Part 2. 기초 단계
 - 3. 종료와 종료 상태(Exit and Exit Status) 
- 4. 특수 문자
 - 5. 변수와 매개변수 소개
  - 4. 특수 문자
 - 5.1. 변수 치환(Variable Substitution) 
- 5.2. 변수 할당(Variable Assignment)
 - 5.3. Bash 변수는 타입이 없다(untyped)
 - 5.4. 특수한 변수 타입
  - 5.2. 변수 할당(Variable Assignment)
 
- 5.1. 변수 치환(Variable Substitution) 
 - 6. 쿼우팅(quoting) 
- 7. 테스트
  - 7.1. 테스트(Test Constructs) 
- 7.2. 파일 테스트 연산자
 - 7.3. 비교 연산자(이진)
 - 7.4. 중첩된 if/then 조건 테스트
 - 7.5. 여러분이 테스트문을 얼마나 이해했는지 테스트 해보기
  - 7.2. 파일 테스트 연산자
 
- 7.1. 테스트(Test Constructs) 
 - 8. 연산자 이야기(Operations and Related Topics)
 - 8.1. 연산자(Operators) 
- 8.2. 숫자 상수(Numerical Constants)
  
- 8.1. 연산자(Operators) 
 
- 3. 종료와 종료 상태(Exit and Exit Status) 
 - Part 3. 중급 단계(Beyond the Basics)
 - 9. 변수 재검토(Variables Revisited)
 - 9.1. 내부 변수(Internal Variables) 
- 9.2. 문자열 조작
 - 9.3. 매개변수 치환(Parameter Substitution)
 - 9.4. 변수 타입 지정: declare 나 typeset
 - 9.5. 변수 간접 참조
 - 9.6. $RANDOM: 랜덤한 정수 만들기
 - 9.7. 이중소괄호(The Double Parentheses Construct)
  - 9.2. 문자열 조작
 
- 9.1. 내부 변수(Internal Variables) 
 - 10. 루프와 분기(Loops and Branches)
 - 10.1. 루프 
- 10.2. 중첩된 루프
 - 10.3. 루프 제어
 - 10.4. 테스트와 분기(Testing and Branching)
  - 10.2. 중첩된 루프
 
- 10.1. 루프 
 - 11. 내부 명령어(Internal Commands and Builtins)
 - 11.1. 작업 제어 명령어
 
- 12. 외부 필터, 프로그램, 명령어
 - 12.1. 기본 명령어 
- 12.2. 복잡한 명령어
 - 12.3. 시간/날짜 명령어
 - 12.4. 텍스트 처리 명령어
 - 12.5. 파일, 아카이브(archive) 명령어
 - 12.6. 통신 명령어
 - 12.7. 터미널 제어 명령어
 - 12.8. 수학용 명령어
 - 12.9. 기타 명령어
  - 12.2. 복잡한 명령어
 
- 12.1. 기본 명령어 
 - 13. 시스템과 관리자용 명령어 
- 14. 명령어 치환(Command Substitution)
 - 15. 산술 확장(Arithmetic Expansion)
 - 16. I/O 재지향
  - 14. 명령어 치환(Command Substitution)
 - 17. Here Documents 
- 18. 쉬어가기
  
- Part 4. 고급 주제들(Advanced Topics)
 - 19. 정규 표현식(Regular Expressions)
 - 19.1. 정규 표현식의 간략한 소개 
- 19.2. Globbing
  
- 19.1. 정규 표현식의 간략한 소개 
 - 20. 서브쉘(Subshells) 
- 21. 제한된 쉘(Restricted Shells)
 - 22. 프로세스 치환(Process Substitution)
 - 23. 함수
  - 21. 제한된 쉘(Restricted Shells)
 - 24. 별칭(Aliases) 
- 25. 리스트(List Constructs)
 - 26. 배열
 - 27. 파일들
 - 28. /dev 와 /proc
  - 25. 리스트(List Constructs)
 - 29. 제로와 널(Of Zeros and Nulls) 
- 30. 디버깅
 - 31. 옵션
 - 32. 몇 가지 지저분한 것들(Gotchas)
 - 33. 스타일 있게 스크립트 짜기
  - 30. 디버깅
 - 33.1. 비공식 쉘 스크립팅 스타일시트
 
- 34. 자질구레한 것들
 - 34.1. 대화(interactive)형 모드와 비대화(non-interactive)형 모드 쉘과 스크립트 
- 34.2. 쉘 래퍼(Shell Wrappers)
 - 34.3. 테스트와 비교: 다른 방법
 - 34.4. 최적화
 - 34.5. 팁 모음(Assorted Tips)
 - 34.6. 괴상한 것(Oddities)
 - 34.7. 이식성 문제(Portability Issues)
 - 34.8. 윈도우즈에서의 쉘 스크립팅
  - 34.2. 쉘 래퍼(Shell Wrappers)
 
- 34.1. 대화(interactive)형 모드와 비대화(non-interactive)형 모드 쉘과 스크립트 
 - 35. Bash, 버전 2
 
- 36. 후기(Endnotes)
 - 36.1. 저자 후기(Author's Note) 
- 36.2. 저자에 대해서
 - 36.3. 이 책을 만드는데 쓴 도구들
  - 36.2. 저자에 대해서
 - 36.3.1. 하드웨어 
- 36.3.2. 소프트웨어와 프린트웨어
  
- 36.3.1. 하드웨어 
 - 36.4. 크레딧
 
- 36.1. 저자 후기(Author's Note) 
 - 서지사항 
- A. 여러분들이 보내준 스크립트들(Contributed Scripts)
 - B. Sed 와 Awk 에 대한 간단한 입문서
  - A. 여러분들이 보내준 스크립트들(Contributed Scripts)
 - C. 특별한 의미를 갖는 종료 코드 
- D. I/O와 I/O 재지향에 대한 자세한 소개
 - E. 지역화(Localization)
 - F. 샘플 .bashrc 파일
 - G. 도스(DOS) 배치 파일을 쉘 스크립트로 변환
 - H. 연습문제
 - I. Copyright
  - D. I/O와 I/O 재지향에 대한 자세한 소개
 
- 표 목록 
- 11-1. 작업 ID(Job Identifiers)
 - 31-1. bash 옵션들
 - B-1. 기본 sed 연산자
 - B-2. 예제
 - C-1. "예약된" 종료 코드
 - G-1. 배치 파일 키워드/변수/연산자 와 그에 해당하는 쉘 동의어
 - G-2. 도스 명령어와 동일한 유닉스 명령어
  - 11-1. 작업 ID(Job Identifiers)
 
- 예 목록 
- 2-1. cleanup: /var/log 에 있는 로그 파일들을 청소하는 스크립트
 - 2-2. cleanup: 위 스크립트의 향상되고 일반화된 버전.
 - 3-1. 종료/종료 상태
 - 3-2. !으로 조건을 부정하기
 - 4-1. 코드 블럭과 I/O 재지향
 - 4-2. 코드 블럭의 결과를 파일로 저장하기
 - 4-3. 최근 하루동안 변경된 파일들을 백업하기
 - 5-1. 변수 할당과 치환
 - 5-2. 평범한 변수 할당
 - 5-3. 평범하고 재미있는 변수 할당
 - 5-4. 정수? 문자열?
 - 5-5. 위치 매개변수
 - 5-6. wh, whois 도메인 네임 룩업
 - 5-7. shift 쓰기
 - 6-1. 이상한 변수를 에코하기
 - 6-2. 이스케이프된 문자들
 - 7-1. 무엇이 참인가?
 - 7-2. [ ] 와 test 의 동일함
 - 7-3. (( ))로 산술식 테스트 하기
 - 7-4. 산술 비교와 문자열 비교
 - 7-5. 문자열이 널인지 테스트 하기
 - 7-6. zmost
 - 8-1. 산술 연산자 쓰기
 - 8-2. && 와 || 를 쓴 복합 조건 테스트
 - 8-3. 숫자 상수 표기법:
 - 9-1. $IFS 와 빈 칸
 - 9-2. 타임 아웃 처리 입력
 - 9-3. 타임 아웃 처리 입력, 한 번 더
 - 9-4. 내가 루트인가?
 - 9-5. arglist: $* 과 $@ 로 인자를 나열하기
 - 9-6. 일관성 없는 $*과 $@의 동작
 - 9-7. $IFS 가 비어 있을 때 $*와 $@
 - 9-8. 밑줄 변수(underscore variable)
 - 9-9. 그래픽 파일을 다른 포맷 확장자로 이름을 바꾸면서 변환
 - 9-10. 매개변수 치환과 : 쓰기
 - 9-11. 변수의 길이
 - 9-12. 매개변수 치환에서의 패턴 매칭
 - 9-13. 파일 확장자 바꾸기:
 - 9-14. 임의의 문자열을 파싱하기 위해 패턴 매칭 사용하기
 - 9-15. 문자열의 접두, 접미어에서 일치하는 패턴 찾기
 - 9-16. declare를 써서 변수 타입 지정하기
 - 9-17. 간접 참조
 - 9-18. awk에게 간접 참조를 넘기기
 - 9-19. 랜덤한 숫자 만들기
 - 9-20. RANDOM 으로 주사위를 던지기
 - 9-21. RANDOM 에 seed를 다시 지정해 주기
 - 9-22. C 형태의 변수 조작
 - 10-1. 간단한 for 루프
 - 10-2. 각 [list] 항목이 인자를 두 개씩 갖는 for 문
 - 10-3. Fileinfo: 변수에 들어 있는 파일 목록에 대해 동작
 - 10-4. for 문에서 파일 조작하기
 - 10-5. in [list]가 빠진 for 문
 - 10-6. for 문의 [list]에 명령어 치환 쓰기
 - 10-7. 이진 파일에 grep 걸기
 - 10-8. 특정 디렉토리의 모든 바이너리 파일에 대해 원저작자(authorship)를 확인 하기
 - 10-9. 디렉토리에 들어 있는 심볼릭 링크들을 나열하기
 - 10-10. 디렉토리에 들어 있는 심볼릭 링크들을 파일로 저장하기
 - 10-11. C 형태의 for 루프
 - 10-12. 배치 모드로 efax 사용하기
 - 10-13. 간단한 while 루프
 - 10-14. 다른 while 루프
 - 10-15. 다중 조건 while 루프
 - 10-16. C 형태의 문법을 쓰는 while 루프
 - 10-17. until 루프
 - 10-18. 중첩된 루프
 - 10-19. 루프에서 break와 continue의 영향
 - 10-20. 여러 단계의 루프에서 탈출하기
 - 10-21. 더 상위 루프 레벨에서 계속하기(continue)
 - 10-22. case 쓰기
 - 10-23. case로 메뉴 만들기
 - 10-24. case용 변수를 만들기 위해서 명령어 치환 쓰기
 - 10-25. 간단한 문자열 매칭
 - 10-26. 입력이 알파벳인지 확인하기
 - 10-27. select로 메뉴 만들기
 - 10-28. 함수에서 select를 써서 메뉴 만들기
 - 11-1. printf가 실제로 쓰이는 예제
 - 11-2. read로 변수 할당하기
 - 11-3. read로 여러줄의 입력 넣기
 - 11-4. read를 파일 재지향과 같이 쓰기
 - 11-5. 현재 작업 디렉토리 변경하기
 - 11-6. let으로 몇 가지 산술 연산을 하기.
 - 11-7. eval의 효과 보여주기
 - 11-8. 강제로 로그 아웃 시키기
 - 11-9. "rot13" 버전
 - 11-10. 위치 매개변수와 set 쓰기
 - 11-11. 변수를 "언셋"(unset) 하기
 - 11-12. export를 써서, 내장된 awk 스크립트에 변수를 전달하기
 - 11-13. getopts로 스크립트로 넘어온 옵션과 인자 읽기
 - 11-14. 데이타 파일 "포함하기"
 - 11-15. exec 효과
 - 11-16. 작업을 계속 해 나가기 전에 프로세스가 끝나길 기다리기
 - 12-1. CDR 디스크를 구울 때 ls로 목차 만들기
 - 12-2. Badname, 파일 이름에 일반적이지 않은 문자나 공백 문자를 포함하는 파일을 지우기.
 - 12-3. inode 로 파일을 지우기
 - 12-4. 시스템 로그 모니터링용 xargs 로그 파일
 - 12-5. copydir. xargs로 현재 디렉토리를 다른 곳으로 복사하기
 - 12-6. expr 쓰기
 - 12-7. date 쓰기
 - 12-8. 스크립트에서 두 파일을 비교하기 위해 cmp 쓰기.
 - 12-9. 낱말 빈도수 분석
 - 12-10. 10자리 랜덤한 숫자 만들기
 - 12-11. tail로 시스템 로그를 모니터하기
 - 12-12. 스크립트에서 "grep"을 에뮬레이트 하기
 - 12-13. 목록에 들어 있는 낱말들의 유효성 확인하기
 - 12-14. toupper: 파일 내용을 모두 대문자로 바꿈.
 - 12-15. lowercase: 현재 디렉토리의 모든 파일명을 소문자로 바꿈.
 - 12-16. du: 도스용 텍스트 파일을 UNIX용으로 변환.
 - 12-17. rot13: 초허접(ultra-weak) 암호화, rot13.
 - 12-18. "Crypto-Quote" 퍼즐 만들기
 - 12-19. 파일 목록 형식화.
 - 12-20. column 으로 디렉토리 목록을 형식화 하기
 - 12-21. nl: 자기 자신에게 번호를 붙이는 스크립트.
 - 12-22. cpio로 디렉토리 트리 옮기기
 - 12-23. rpm 아카이브 풀기
 - 12-24. C 소스에서 주석을 제거하기
 - 12-25. /usr/X11R6/bin 둘러보기
 - 12-26. basename과 dirname
 - 12-27. 인코드된 파일을 uudecode하기
 - 12-28. 저당에 대한 월 상환액(Monthly Payment on a Mortgage)
 - 12-29. 진법 변환(Base Conversion)
 - 12-30. 다른 방법으로 bc 실행
 - 12-31. seq로 루프에 인자를 만들어 넣기
 - 12-32. 키보드 입력을 갈무리하기
 - 12-33. 파일을 안전하게 지우기
 - 12-34. m4 쓰기
 - 13-1. 지움 글자(erase character) 세팅하기
 - 13-2. 비밀스런 비밀번호: 터미널 에코 끄기
 - 13-3. 키누름 알아내기
 - 13-4. pidof 로 프로세스를 죽이기
 - 13-5. CD 이미지 확인하기
 - 13-6. 한 파일에서 한번에 파일 시스템 만들기
 - 13-7. 새 하드 드라이브 추가하기
 - 13-8. killall, /etc/rc .d/init.d 에서 인용
 - 16-1. exec으로 표준입력을 재지향 하기
 - 16-2. 재지향된 while 루프
 - 16-3. 다른 형태의 재지향된 while 루프
 - 16-4. 재지향된 until 루프
 - 16-5. 재지향된 for 루프
 - 16-6. 재지향된 for 루프(표준입력, 표준출력 모두 재지향됨)
 - 16-7. 재지향된 if/then 테스트
 - 16-8. 이벤트 로깅하기
 - 17-1. dummyfile: 두 줄짜리 더미 파일 만들기
 - 17-2. broadcast: 로그인 해 있는 모든 사람들에게 메세지 보내기
 - 17-3. cat으로 여러 줄의 메세지 만들기
 - 17-4. 탭이 지워진 여러 줄의 메세지
 - 17-5. Here document에서 매개변수 치환하기
 - 17-6. 매개변수 치환 끄기
 - 17-7. upload: "Sunsite" incoming 디렉토리에 파일 한 쌍을 업로드
 - 17-8. "아무개"(anonymous) Here Document
 - 20-1. 서브쉘에서 변수의 통용 범위(variable scope)
 - 20-2. 사용자 프로파일 보기
 - 20-3. 프로세스를 서브쉘에서 병렬로 돌리기
 - 21-1. 제한된 모드로 스크립트 돌리기
 - 23-1. 간단한 함수
 - 23-2. 매개변수를 받는 함수
 - 23-3. 두 숫자중 큰 수 찾기
 - 23-4. 숫자를 로마 숫자로 바꾸기
 - 23-5. 함수에서 큰 값을 리턴하는지 테스트하기
 - 23-6. 큰 두 정수 비교하기
 - 23-7. 사용자 계정 이름에서 실제 이름을 알아내기
 - 23-8. 지역 변수의 영역(Local variable visibility)
 - 23-9. 지역 변수를 쓴 재귀 함수
 - 24-1. 스크립트에서 쓰이는 별칭(alias)
 - 24-2. unalias: 별칭을 설정, 해제하기
 - 25-1. "and list"를 써서 명령어줄 인자 확인하기
 - 25-2. "and list"를 써서 명령어줄 인자를 확인하는 다른 방법
 - 25-3. "or lists"와 "and list"를 같이 쓰기
 - 26-1. 간단한 배열 사용법
 - 26-2. 배열의 특별한 특성 몇 가지
 - 26-3. 빈 배열과 빈 원소
 - 26-4. 아주 오래된 친구: 버블 정렬(Bubble Sort)
 - 26-5. 복잡한 배열 어플리케이션: 에라토스테네스의 체(Sieve of Erastosthenes)
 - 26-6. 복잡한 배열 어플리케이션: 기묘한 수학 급수 탐색(Exploring a weird mathematical series)
 - 26-7. 2차원 배열을 흉내낸 다음, 기울이기(tilting it)
 - 28-1. 특정 PID와 관련있는 프로세스 찾기
 - 28-2. 온라인 연결 상태
 - 29-1. 쿠키 항아리를 숨기기
 - 29-2. /dev/zero로 스왑 파일 세팅하기
 - 29-3. 램디스크 만들기
 - 30-1. 버그 있는 스크립트
 - 30-2. test24, 버그가 있는 다른 스크립트
 - 30-3. "assert"로 조건을 테스트하기
 - 30-4. exit 잡아채기(Trapping at exit)
 - 30-5. Control-C 가 눌렸을 때 깨끗이 청소하기
 - 30-6. 변수 추적하기
 - 32-1. 서브쉘 함정(Subshell Pitfalls)
 - 34-1. 쉘 래퍼(shell wrapper)
 - 34-2. 조금 복잡한 쉘 래퍼(shell wapper)
 - 34-3. awk 스크립트 쉘 래퍼(shell wrapper)
 - 34-4. Bash 스크립트에 내장된 펄
 - 34-5. 하나로 묶인 Bash 스크립트와 펄 스크립트
 - 34-6. 자신을 재귀적으로 부르는 스크립트
 - 35-1. 문자열 확장
 - 35-2. 간접 변수 참조 - 새로운 방법
 - 35-3. 배열과 약간의 트릭을 써서 한 벌의 카드를 4명에게 랜덤하게 돌리기
 - A-1. manview: 포맷된 맨 페이지를 보는 스크립트
 - A-2. mailformat: 이메일 메세지를 포맷해서 보기
 - A-3. rn: 간단한 파일이름 변경 유틸리티
 - A-4. encryptedpw: 로컬에 암호화 되어 있는 비밀번호로 ftp 사이트에 파일을 업로드하는 스크립트
 - A-5. copy-cd: 데이타 CD를 복사하는 스크립트
 - A-6. days-between: 두 날짜 사이의 차이를 계산해 주는 스크립트
 - A-7. behead: 메일과 뉴스 메세지 헤더를 제거해 주는 스크립트
 - A-8. ftpget: ftp에서 파일을 다운로드 해 주는 스크립트
 - A-9. password: 8 글자짜리 랜덤한 비밀번호 생성 스크립트
 - A-10. fifo: 네임드 파이프를 써서 매일 백업해 주는 스크립트
 - A-11. 나머지 연산자로 소수 생성하기
 - A-12. tree: 디렉토리 구조를 트리 형태로 보여주는 스크립트
 - A-13. 문자열 함수들: C 형태의 문자열 함수
 - A-14. 객체 지향 데이타 베이스
 - F-1. 샘플 .bashrc 파일
 - G-1. VIEWDATA.BAT: 도스용 배치 파일
 - G-2. viewdata.sh: VIEWDATA.BAT 의 스크립트 버전
  - 2-1. cleanup: /var/log 에 있는 로그 파일들을 청소하는 스크립트
 
출처 : http://wiki.kldp.org/HOWTO//html/Adv-Bash-Scr-HOWTO/index.html
http://blog.naver.com/misadamo.do?Redirect=Log&logNo=80001904458
이 글에는 트랙백을 보낼 수 없습니다
				
				

0