Operating System/Solaris2007/08/04 09:02

18장. UNIX C-SHELL PROGRAMMING 기법

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 예

1. C-SHEEL이란

 . 사용자 interface이다.
 . 어떤 특정한 상태가 없다.
 . C-PROGRAM언어와 유사한 구문을 갖는 강력한 명령언어를 제공한다.
 . UNIX의 사용을 휠씬 쉽게 해준다.
 . Utility, 특정 사용자 Interface와 Process FILE, 심지어는 범용 Program 마저도 신속하게 개발할 수 있도록 한다.

2. UNIX SHEEL의 주요 특성

(1) .cshrc .login .logout같은 특수 FILE을 사용하여 자신의 session을 취향에 맞도록 수정할 수 있다.
(2) HISTORY기능을 쓰면 명령을 다시 실행할 수 있으며 ALIAS를 쓰면 연속된 명령을 다른 이름으로 사용할 수 있다.
(3) SHEEL변수를 쓰면 연속되는 명령에서 긴 문자를 재사용 할 수 있도록 저장할 수 있다. 입출력 방향전환, 명령GROUP, 명령 치환 등은 명령을 구성하기 위한 C-SHEEL의 기본요소다.
(4) UNIX의FILE SYSTEM은 계층적 구조를 가지고 있다. FILE을 지정하는 것은 현재 DIRECTORY나 ROOT DIRECTIRY로 시작하는 경로이름을 사용한다.
(5) C-SHEEL은 Program 언어이다. 새로운 도구를 창조해 내는 것은 C-SHEEL SCRIPT,C-SHEEL 명령, PROGRAM구조, ERROR검사, 입출력 명시 등을 포함하는 TEXT FILE의 작성을 통해서 이루어진다.

3. C-SHEEL의 용도

다음 3가지 방법으로 사용할 수 있다.

(1) 대화적으로 UNIX명령을 실용하기 위해
(2) 개인화에서 작업 환경을 정의하기 위해
(3) PROGRAM에서 C-SHEEL PROGRAM같은 새로운 도구를 생성하기 위해

4. SHELL의 종류

(1) C-SHELL(csh) : C PROGRAM 언어로 부터 그 구조와 이름이 유래됨
(2) UNIX 표준 BOURNE SHEEL (sh)
(3) UNIX V BOURNE SHELL (sh5)
(4) KORN SHELL (ksh) : BOURNE SHELL로 부터 유래된 최근의 SHELL

5. SHELL 명령어와 명령어 FILE

(1) PROFILE과 .profile 명령 FILE

  모든 사용자에게 적용되는 SHELL명령 FILE은 /etc/profile인데 사용자가 login하여 사용자의 directory의 명령 file을 수행하기 전에 실행하도록 system 관리자가 기본적으로 설정한 명령 file이다. 각 사용자는 etc/profile을 수행한 후 자신이 설정한 명령 file을 login한 후 바로 실행 시킬 수 있는데 .profile에 명령을 설정하면 된다.

    (예) .profile FILE

    tty -s

    if test $? = 0
    then

            stty dec crt

    fi

    PATH=.:$HOME/bin:/usr/ucb:/bin:/usr/bin:/usr/local:/usr/new:/usr/hosts
    MAIL=/usr/spool/mail/$USER

    tset -n -I
    export TERM MAIL PATH
    biff n

(2) .cshrc 명령어 file (c-shell만 사용)

  다양한 경로의 변경이나 전체에 영향을 미치는 alias값 등의 설정을 변경하려는 명령을 지정하는데 사용하는 file이다.

  .cshrc file은 HOME DIRECTORY에 존재하여 C-SHELL에 의해 해석된다. 이 FILE은 SHELL SCRIPT를 효율적으로 사용 할 수 있도록 변수 할당, ERROR CODE와 같은 진보된 기능을 위해 이용된다.

  (예) .cshrc FILE

    if ($?prompt) then

            set prompt = "csh> "

            set notify
            set history = 50
            set term = vt100

            alias h history
            alias gc setenv GKS3Dconid basic002:0.0
            alias ung unsetenv GKS3Dconid
            alias unws unsetenv GKS3Dwstype
            alias gpr setenv GKS3Dconid /dev/tty01
            alias gp setenv GKS3Dwstype %x10500033
            alias gl setenv GKS3Dwstype %x00500033
            alias isl4 setenv GKS3Dwstype %x0070003d
            alias l "pwd;ls -F"
            alias pd pushd
            alias pop popd
            alias help apropos
            alias vt52 "set term = vt52"
            alias ti745 "set term = ti745 ; stty -tabs"
            alias ti785 "set term = ti745 ; stty -tabs"
            alias vt100 "set term = vt100"
            alias _dry cd /usr/skb/dry_source
            alias _opti cd /usr/skb/dry_source/opti
            alias _daed cd /usr/skb/dry_source/contact
            alias _marpol cd $HOME/sd9112/marpol
            alias _source cd $HOME/../source/sikob_source
            alias dryrun /usr/skb/dry_source/rev3/dryrun
            alias gendat /usr/skb/dry_source/rev3/gendat
            alias profile /usr/skb/dry_source/rev1/profile
            alias prelikon cd /usr/sbdd1.users/sikob/source/prelikon
            alias pkdata cd /usr/sbdd1.users/pkdata
            alias hpgl "echo '||e5' > /dev/tty01;setenv GKS3Dconid /dev/tty01"
            alias lo 'echo -n "From> ";set w = $<; find> "'
            alias cd 'cd \!*;set prompt="SIKOB [`dirs`]>"'

    endif


(3) .login 명령어 file (c-shell만 사용)

  만약 login shell이 c-shell이면 HOME DIRECTORY 내에 존재하는 .login FILE을 읽은 후 그 내용을 순서대로 실행시킨다. .login FILE에는 많은 명령이 있으나 특히, SHELL 자체에 대한 설정 명령 SET가 많이 있다.

    (예) .login FILE

    stty dec new cr0
    tset -I -Q
    umask 022

    setenv MAIL /usr/spool/mail/$USER
    set mail=$MAIL
    set  path=(. $HOME/bin  /usr/ucb /bin  /usr/bin /usr/local  /usr/new  /usr/hosts /usr/users/sikob/bin/skcpl)
    set prompt="SIKOB > "
    setenv EXINIT 'set redraw wm=8'
    setenv DECFORT_FFRLIB "T"

    biff n

    date

(4) .logout 명령어 file (c-shell만 사용)

  logout명령을 수행 시키면 file logout에 저장된 명령을 실행 시킨다.

    (예) .logout FILE

    #
    # default cadds user logout script
    #
    # 24-Jun-86 HPS; 'oplog off' is commented out
    # 25-mar-86 jaf; moved
    # 11-mar-86 aws; created
    ######################################################################
    #
    #oplog off
    #clear

    cal

6. SHELL SCRIPT작성시 주의 사항

(1) 첫 번째 LINE 첫 COLUME은 '#!'로 시작하며 그 내용을 읽는 사람이 알기 쉽도록 SHELL SCRIPT를 수행하는 SHELL의 경로명을 적는다.
(2) SHELL SCRIPT는 보통 작성자가 쉽게 간과해버리는 주석에 대해 강조하여 작성한다.
(3) 주석은 #으로 시작하며 SHELL에 의해 명령어로 해석되지 않는다. 하지만 만일의 경우 명령어로 해석되는 것을 방지 하기 위해 # 다음에 QUOTATION MARK로 문자를 열고 닫는다.
(4) 명령어를 적은 후 동일 LINE에 #으로 시작하는 주석을 IN LINE COMEND라고 하며 명령어의 마지막에 ;을 사용하여 명령어와 IN-LINE COMEND와 분리 한다.
(5) ECHO 명령은 ECHO 명령 다음의 명령과 함께 출력하는데 유용하게 사용된다.

7. SHELL SCRIPT의 수행

① SUB-SHELL을 수행 시킨다.
② 사용자의 현재 SHELL내에서 SCRIPT를 수행 시킨다.
③ SCRIPT를 수행 가능하게 만든다.

(1) SUB-SHELL의 수행

      BOURNE SHELL의 경우 : sh
      C-SHELL 의 경우 : csh

(2) 사용자의 현재 shell내에서 script 수행

      source

8. shell script 변수

(1) 변수명 부여시 주의 사항

  ① 변수의 이름은 문자로 시작한다.
  ② 변수는 문자, 숫자, 밑줄로 구성한다.
  ③ 길이는 20자까지 제한한다.

(2) 변수에 값 할당/해제

  변수에 값을 할당하는 문자 = 를 사용하고 앞뒤에 공백이 없어야 한다.

설정

      set <변수명> = <값>

        * 값이 문자열인 경우 " " double quotation 사용

해제

      $ unset <변수명>

(3) 변수값 출력

echo $ <변수명>
echo " "
echo <단어>

(4) read문장을 이용한 값 할당

  표준 입력 (key board)로 입력을 받아 변수에 값을 직접 할당

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>에 지정한 Pattern이 일치 하면 참

<문자열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

명령어 검색 경로

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명>


19. 명령어의 대체

1) 명령어의 변수 할당

korn shell의 경우

c-shell의 경우

typeset <변수명> = $(<명령어>)

set <변수명> = <'명령어'>


2) 명령어의 대체

  명령어를 변수에 할당하여 명령어의 인수로 사용하는 것이 아니라 명령어의 인수로 명령어를 사용하여 대체하여 해석된 후 수행한다.

20. 명령어 집단화에 유용한 문자 및 명령

문자 및 명령

결과 및 설명

ECHO <명령열>

출력에 <문자열>이 표시

;

명령어와 명령어 구분

\

명령이 한 LINE을 초과할 경우 연결

( )

명령어 GROUP을 표시

" "

()와 같이 C-SHELL에 명령어 GROUP을 표시하여 해석하도록 함


21. BACKGROUND 상태에서 PROCESS수행

1) BACKGROUND 상태에서 입력되는 보통의 명령어와 관계 없이 PROCESS를 수행 시키는 곳을 말한다.

      <수행시킬 명령어> &

    * 수행 후 "[작업번호] PROCESS번호 "의 형식으로 MESSAGE가 출력된다.

2) login shell의 종료

   init process 는 system을 시작했을 때 수행이 시작되며 system관리자나 consol에 의해 관리되고 책임을 갖게 된다.

   사용자가 logout하면 login shell과 함께 background에서 수행되는 process가 종료되는 것이 아니라 background process의 부모 process를 login shell에서 init process로 옮겨 할당된다.

3) background작업의 표준 입력

   .login file에서 set notify로 설정하면 backgound 작업 중에 system에서 대화식으로 요구되는 입력을 할 수 있게 된다. 즉, background 작업 중 표준 입력 (key board)로 부터 입력을 해야 할 경우 system에서 message를 출력하여 입력을 요구하며 입력이 되면 계속 수행된다.

      fg <작업 번호>

4) sleep명령어

   지정한 시간 동안 명령어의 수행을 일시 정지 시키는 명령어

   sleep <시간 : 숫자>; <수행 명령어> &

22. 사용자 process의 실행 순위의 조정

보통의 명령보다 낮은 실행 순위로 명령을 수행 시키면 긴 처리 시간 후에 완료된다. 보통의process는 0의 실행 순위를 가지며, -20~20까지의 범위에서 설정 할 수 있다.

       nice <실행순위> <수행명령어> &

다음은 유용하게 사용되는 실행 순위이다.

실행 순위

설        명

+19

process가 매우 느리게 수행된다.

+10

nice명령어의 실행 순위를 지정하지 않을 때 기본 실행 순위

0

보통 작업의 실행 순위

-1 ~ -20

system관리자만 설정 할 수 있는 실행순서로 process를 빠르게 수행시킨다.


23. 수행중인 process의 정지와 재 수행

jobs명령은 작업 번호에 의해서 작업의 list를 출력 시킨다.

작업 제어 명령어

명령어

설                명

<명령어> &

background에서 명령어나 작업을 수행

jobs

정지상태나 수행중인 작업 번호를 활동 상태의 작업

list 출력

stop<작업번호>

지정한 background작업의 정지

Ctrl+Z

현재 수행중인 foreground 작업의 정지

Kill PID

PID번호에 의해 작업을 TERM/sjg로 이름 지어진 번호를 보내면서 정지

Kill -l

작업 정지 신호의 list

bg <작업번호>

background작업을 계속 수행

fg <작업번호>

foreground 작업을 계속 수행


24. C-SHELL를 이용한 PROGRAM 예

   (cadds file backup용)

#
# default backsrc script
#

     set io = "tar: read error: I/O error"
     while(1)

     set d = `date`

     echo ' '
     echo ' '
     echo " DATE : "$d[6]. $d[2]. $d[3].
     echo " TIME : "$d[4]
     echo ''

     echo ' ******************************************************'
     echo '   CREATE TAPE ARCHIVES, AND ADD OR EXTRACT FILES'
     echo ' ******************************************************'
     echo ''
     echo '  ************************************************'
     echo '  *     1. file list for m.t                   *'
     echo '  *     2. back up (work station ===> m.t)     *'
     echo '  *     3. restore (m.t ===> work station)     *'
     echo '  *     4. exit                                *'
     echo '  ************************************************'
     echo ''
     echo -n '    WHAT DO YOU WANT TO EXECUTE ? ---- NO. : '

     set test = $<
     echo ''

if ($test) then
if($test == 1) then

     mt -f /dev/rst0 rewind

     while(1)

     echo ' ******************************************************'
     echo ' *     Display table of contents of the archive     *'
     echo ' ******************************************************'
     echo ''

     tar -tvf /dev/nrst0
     echo -n '    Continue ("y"/"n") ....................: '
     set cont = $<

     if($cont == n) break
     end
   else if ($test == 2) then

     while(1)

     echo ''
     echo ' *******************************************'
     echo ' *              BACKUP MODE              *'
     echo ' *******************************************'
     echo ''

     echo -n '    INPUT (file & directory) ............. : '
     set fldir = $<
     tar -cvf /dev/nrst0 $fldir
     echo -n '    Continue ("y"/"n") ....................: '
     set cont = $<

     if($cont == n) break
     end
   else if ($test == 3) then
     mt -f /dev/rst0 rewind

     while(1)

     echo ''
     echo ' *******************************************'
     echo ' *             RESTORE MODE              *'
     echo ' *******************************************'
     echo ''

     echo -n '    INPUT (skip over the end of file).... : '

     set skip = $<
     mt -f /dev/nrst0 fsf $skip
     echo -n '    INPUT (file & directory) ............. : '
     set fldir = $<
     tar -xvf /dev/nrst0 $fldir

     echo -n '    Continue ("y"/"n") ....................: '

     set cont = $<
     if($cont == n) break
     end

   else if ($test == 4) then
     break

endif
end
mt -f /dev/rst0 rewind

     echo '    ***** END OF BACKUP/RESTORE C-SHEEL ***** '

Creative Commons License
Posted by BLUEDAY™
TAG ,