Subject : UNIX C-SHELL PROGRAMMING 기법(2)

Description :

 
CONTENTS:

 1. C-SHEEL이란
 2. UNIX SHEEL의 주요 특성
 3. C-SHEEL의 용도
 4. SHELL의 종류
 5. SHELL 명령어와 명령어 FILE
 6. SHELL SCRIPT작성시 주의 사항
 7. SHELL SCRIPT의 수행
 8. shell script 변수
 9. temporary file의 사용
10. shell script 제어문
11. 반복 제어문의 종류
12. 인수 list 처리
13. 환경 변수의 사용(변수명은 대문자)
14. 기정 변수의 사용 (set으로 내용 검색)
15. shell 변수의 특성
16. 문자 single(') 와 double(") 와 backword apostroples(') 사이의 차이점
17. shell 변수를 사용한 산술 연산
18. shell script의 debugging
19. 명령어의 대체
20. 명령어 집단화에 유용한 문자및 명령
21. BACKGROUND 상태에서 PROCESS수행
22. 사용자 process의 실행 순위의 조정
23. 수행중인 process의 정지와 재 수행
24. C-SHELL를 이용한 PROGRAM 예
25.일반적인 UNIX 명령들

DESCRIPTION:

 9. temporary file의 사용
  현재 사용 directory에 임시 file을 작성 하는것은 매우 안전하지만 다음과 같은 이유로 피하는것
  이 좋다.
    (1) 현재의 directory 에 TEMP라는 file이 이미 존재할 경우 shell script를 수행 시키면 
        temp file이 새로운 file로 대체되어 원하지 않는 부작용이 생길수 있다.
    (2) 한 사용자가 작성한 명령 shell file을 다른 사용자가 공유하려는 경우 명령을 수행한 결과
        생성되는 임시 file이 다른 사용자에게 사용될수 있는지는 확실 하지 않다.

  ㅇ대체 방안
    (1) 임시 file만을 저장하는 directory에 shell script file과 수행되는 PID번호를 연결한
        이름으로 저장하게 한다.

 10. shell script 제어문
  (1) 조건문의 사용
    명령을 연속으로 수행하지 않고 조건을 부여 수행 순서를 변경하고자 할때 사용
   
         korn shell의 경우

  	    if <조건이나 명령 표현식> ;
		then
		    참인 경우 - 명령 수행
		            :
  		            :
	    else
	            거짓인 경우 - 명령 수행
                            :
                            :
            fi


           c-shell의 경우

  	    if {<조건식/명령 표현식>} then

                    참인 경우 - 명령 수행
                            :
                            :
  	    else
                    거짓인 경우 - 명령 수행
                            :
                            :
            endif


  ㅇ주의 사항
    ① then의 위치
       korn shell : if 명령과 다른 line, 즉 다음 line
       c-shell    : if와 같은 line상에 명령
    ② c-shell에서는 <조건식/명령 표현식>은 { }에 표현
    ③ <조건식/명령 표현식>의 거짓에 대한 처리가 필요치 않은 else이하는 생략
    ④ 명령 표현식의 참/거짓의 명령어 종료 상태 변수에 값을 할당한다.
       정상적인 경우 변수 값은 0(zero)가 저장되며 실패인 경우 다른 값이 저장되며 아래의 
       값에  의해 결정된다.
       
        korn shell의 경우 : $status

         c-shell의 경우  : $?


  ㅇ조건 대상
    ① 명령어가 조건 비교 판단
    ② 변수에 저장된 값과 숫자의 비교 판단 - 산술 연산자 사용
    ③ 변수에 저장된 문자열과의 비교 판단
    ④ file의 종류 비교 판단
    ⑤ file이나 변수의 형태를 비교 판단

   ㅇ 문자열 비교 연산자
     
        표현식			 설                 명

<문자열1> == <문자열2>		 두문자열이 같으면 참

<문자열1> != <문자열2>		 두문자열이 다르면 참

<문자열1> =~ <문자열2>		 <문자열1>과<문자열2>에 지정한 패턴이 일치 하면 참

<문자열1> !~ <문자열2>		 <문자열1>과<문자열2>에 지정한 패턴이 일치 하지 않으면 참


  ㅇfile의 접근권한, 존재유무, 종류 비교 조건
   
	 조 건			 설                  명

	-r 		 접근권한 읽기(r)로 설정 되면 참

	-w 		 접근권한 쓰기(w)로 설정 되면 참

	-x 		 접근권한 실행(x)로 설정 되면 참

	-e 		 존재하면 참

	-o 		 소유자가 명령 실행자면 참

	-O 	 	소유자가 명령 실행자면 참

	-z  		지정한 file의 내용이 없으면 참, 즉 file size 0(zero)면 참

	-f 		 directory 가 아니면 참

	-d 		 directory 이면 참



  ㅇ산술 연산자
   
  연산자	 설     명

     +		 덧셈

     -		 뺄셈

     *		 곱셈

     /		 나눌셈

     %		 나눌셈의 정수 나머지

     ^		 승수



  ㅇ논리 연산자
   
  연산자	 표 현 자	 	 설          명

    NOT		 ! <표현식>	       	 <표현식>이 참이면 거짓

    OR		 <표현식1>||<표현식2>	 표현식 1,2중 하나가 참이면 참

    AND		 <표현식1>&&<표현식2>	 표현식 1,2가 모두 참일때 참
 


  (2)중첩 if문
    if ~ else ~ endif문 내에 if ~ else ~ endif문이 있는 경우
  (3) 반복 (LOOPING)


 11. 반복 제어문의 종류
  (1) interative 반복문
     지정된 숫자만큼 반복하여 수행
     
         korn shell의 경우	 

	for <제어변수> in (<항목의 list>)
	  do <명령문>
	done

 	 c-shell의 경우

	foreach<제어변수> (<항목 list>)
	   <명령문>
	end



  * 문장내에 항목 list를 기술하기 보다는 명령어 인수 list로 대체하는것이 일반적이다.

  ㅇ항목 list를 명령어의 list로 대체 경우
     
         korn shell의 경우	 c-shell의 경우

       for <반복 횟수> in $@	 foreach <반복횟수> in ($argv[*])


  (2) conditional 반복문
     조건이 만족하면 계속 수행 만족하지 않으면 정지
     
         korn shell의 경우

  	while<조건>
	     do
	       <명령어들>
	  done

	c-shell의 경우

	  while (<조건>)
	     do
	       <명령어들>
	  end



    * <조건>은 if ~ else ~ endif문에서 사용했던 조건 표현식과 같다.

  ㅇ주의 사항
    ① <조건>이 참이면 일련의 명령을 수행한후 다시 <조건> 조사
    ② <조건>이 참이면 명령 수행, 거짓이면 반복문을 끝낸다.
    ③ <조건>이 참만 있으면 무한 loop처리로 program 오류 발생
    ④ 무한 loop로 판단되면 Ctrl+C로 정지
    ⑤ 무한 loop의 반복 원인을 찾아 수정

    set noglob : 입력되는 문자 ?가 if문에서의 패턴 사용 문자로 사용되는것을 방지한다.


 12. 인수 list 처리
  $# - positional parameter  라고 부르며, 인수의 갯수를 저장하며, 공백에 의해 분리되어  위치를 
  나눈다. 보통 $1 ~ $9까지의 변수를 사용하며 그이상일때는 { }를 사용하여 표시한다.


 13. 환경 변수의 사용(변수명은 대문자)
  ① 이미 정의되어 사용자가 이름을 만들지 않아도 system에서 자동적으로 변수에 값을 저장하거나
     사용자가 필요로 할때 이용 할 수 있다.
  ② 사용자 환경에서 제어 된다.


   ㅇ환경 변수에 대한 설명 (env명령으로 내용 검색)
     
   변수명	 설                명

  TERM		 TERMINAL 유형을 정의하는 CODE로 설정

  HOME		 사용자의 HOME DIRECTORY정의, 절대 경로명을 가진다.

  PATH		 명령어 검색 경로

  USER		 모든 사용자의 LOGIN명을 가진다.

  SHELL		 사용자의 LOGIN SHELL, 절대 경로명을 가진다.

  MAIL		 사용자의 우편물을 저장하는 DIRECTORY로 경로명을 가진다.

  EXINT		 ex, vi편집기에 사용하는 OPTION들을 초기화한다.(40개)

  TERMCAP	 개인 DATA BASE를 사용하도록 한다. (DEFAULT는 etc/termcap)

  TTYLINE	 TERMONAL DEVICE PROGRAM을 사용할수 있도록 하기위해서 선언




 14. 기정 변수의 사용 (set으로 내용 검색)
     
  set 변수 = 문자열

기정 변수명	 설                    명

 path		 명령어 검색 경로 directory명의 list를 가진다.

 cdpath		 unix 계층적 file system의 특성을 살려 작업영역을 독립된 
		 directory로 구분 할때 사용, 절대 경로명의 단어list

 home		 HOME DIR.의 절대 경로명을 포함하고 있다.
   		 LOGIN PROGRAM으로 부터 받은 값으로 초기화 한다.

 shell		 default c-shell은 shell을 /bin/csh로 초기화
		대개의 경우는 바꾸지 않는것이 좋다.

 mail		 MAIL BOX가 있는곳 설정, set mail = (60 /usr/sara)

 history	 history에 저장된 명령의 갯수 정의

 histchars	 history명령을 수행시키는데  사용하기를 원하는 수개의 문자
		 로 설정, .cshrc file내에서 정의 할수 있다.

 savehist	 login session간의 history list를 연결하고 싶을때 사용

 prompt		 prompt 정의, 사건번호를 보이기 위해 history 문자 ! 를
		포함 시킬수 있다.

 ignoreeof	 실수로 Ctrl+D를 typing했을때 logout방지

 noclobber	 출력 방지 전환시 이에 존재하는 file에 겹쳐 쓰는것을 방지

 time		 주어진 시간 이상의 CPU시간을 소요하는 모든 명령에 대해
		 지원 사용 통계치를 보여 준다.

 cwd		 사용자의 현재 사용 directory



 15. shell 변수의 특성
  ① shell script에서 정의되어 생성된 변수는 shell script가 수행되는 동안만 존재하므로 명령어
     입력 line에서 대화식으로 참조하거나 다른 shell script에서 사용할 수 없다.
  ② terminal에서 keyboard 입력으로 변수를 설정한 경우 shell script내에서 대화식으로 사용한
     변수를 사용할 수 없게 된다.
  ③ 지역 변수다.

  1)변수값 공유
   
         korn shell의 경우		 c-shell 의 경우

  typeset <변수명> = <할당할 값>         setenv <변수명> <할당값>
  export <변수명>
  export <변수명> = <할당값>


  export 명령 : shell script와 명령 입력 line에서 공유하여 사용
  * 상위 shell에서 공유한 변수는 하위 shell에서 참조 가능 하지만 하위 shell에서 공유한 변수는
    상위 shell에서 참조 할수 없다.


 16. 문자 single(') 와 double(") 와 backword apostroples(') 사이의 차이점
   
표식 문자	 설                  명

     '		 무조건 문자열 해석하여 출력
		 변수,명령어,문자 패턴 모두 인식 하지 못함

     "		 명령어와 변수를 해석하여 문자열과 출력
		 명령어 '<수행 명령어>'
		 변수는 $<변수명> 형식으로 사용

     `		 명령어나 변수로 해석


 17. shell 변수를 사용한 산술 연산
   
              korn shell의 경우

	((<변수> = <변수나값> <산술연산자><변수나값>
	let <변수> = <변수나값><산술연산자><변수나값>

	      c-shell의 경우

	@변수=<변수나값><산술연산자><변수나값>



 18. shell script의 debugging
  1) shell tracing
     set verbose - shell script program에 set verbose의 명령을 추가하여 명령을 추적 
                   조사 할수있다.
   
         korn shell의 경우		 c-shell의 경우

  ksh -v <실행 shell script명>        csh -v <실행 shell script명>
  ksh -x <실행 shell script명>        csh -x <실행 shell script명>

Revision History

작성일자 : 96.06.14
작성자 : 김도경

수정일자 : 
수정자