SHELL PROGRAMING

    1. 쉘의 기능과 특성


    - 일반적으로 쉘의 기능과 특성은 다음과 같다.

    명령어 해석, 환경제어, 쉘 프로그래밍


    2. 쉘의 종류와 프롬포트

    3. 쉘의 종류와 개발자


    쉘 종류

    개발자

    개발 년도

    프롬프트

    bsh

    Steven Bourne

    1979

    $

    bash

    Brain fox chet Ramey

    1989

    #

    csh

    Bill joy 

    1981

    %

    ksh

    David Korn

    1986

    $

    tcsh

    Ken greer

    1982

    >

    zsh

    Paul Falstad

    1990

    %

    Dash

    Herbert Xu

    1997

    #


    4. 쉘을 변경하는 명령어


    4.1 PS1

    영구적이 아닌 현재 로그인된 사용자의 지역변수 프롬프트를 바꾸는 것.

    다음 로그인 시 원래대로 돌아오게 된다.

    PS1=[원하는 프롬프트]


    4.2 chsh

    영구적으로 쉘 변경.

    ROOT 권한이 반드시 필요하다.

    chsh [-s name-of-shell] [user-id]

    chsh -s /bin/csh prof


    4.3 /bin/*sh

    바이너리 밑에 SH로 끝나는 파일들을 찾아 그 파일 이름을 실행하면

    쉘이 바뀐다.


    만약 bin 밑에 dash라는 파일이 존재한다면

    프롬프트에서 dash라고 입력하면 프롬프트가 바뀌게 된다.



    5, 7, 8. 쉘의 환경변수 관련 명령


    5.1 SET

    현재 설정되어있는 지역 환경변수의 값을 보기위해 SET 명령어가 사용된다.


    5.2 READONLY

    읽기전용 변수로 사용하기위해 readonly [변수명]을 사용한다.

    readonly 명령어 후 인자가 없을 시 readonly 된 변수들을 나열해준다.


    5.3 EXPORT

    지역변수로 설정되어 있는 변수를 전역변수로 바꾸기 위해 export [변수명]을 사용한다.

    export 명령어 후 인자가 없을 시 전역변수들을 나열해준다.


    6. 쉘 관련 환경변수


    PATH - 명령어를 찾기 위한 검색 경로

    SHELL - 로그인 쉘의 절대경로

    PWD - 현재 디렉터리의 절대경로

    TERM - 터미널 명

    HOME - 사용자가 로그인되는 홈 디렉터리

    USER - 사용자 명

    PS1 - 현재 프롬프트


    9. 명령어 사용법(명령어 사용으로 틀린 형식을 찾아낼 수 있다)


    9.1 변수의 사용

    A. 대입

    * ) 변수명에 값을 넣을때는 띄어쓰기하지않는것을 주의해야 한다.

    * ) 숫자형 문자형의 구별이 없고 값을 Double Quotation Mark로 감싸 문자열 변수처럼 사용한다.

    [변수명]=[값]


    myname=Song    // myname이라는 지역변수에 Song이라는 문자를 넣는다.


    * ) 많은공백이 포함되었을 때 Double Quotation Mark로 묶어준다.

    myname2="Song    Gil    Young"




    B. 출력

    * ) 변수를 출력, 혹은 사용하고자 할때는 앞에 "$"를 주면 이것이 변수라는것을 시스템에 알려준다.

    echo $[변수명]


    echo $myname   // myname이라는 변수를 출력한다.

    결과 - Song


    * ) 출력시 많은 공백, '*', '.'이 포함되었을때도 이것이 문자임을 표현하기 위해서는 전체 문장을 Double Quotation Mark로 묶어준다.


    echo $myname2

    결과 - Song Gil Young

    echo "$myname2"

    결과 - Song    Gil    Young


    * ) 만약 명령어의 결과값을 변수로 저장하고 싶을 시에는 ()를 사용한다.


    openls=$(ls -l)    //ls -l의 결과값이 openls에 저장되었다.


    * ) 명령어를 변수에 넣고 실행시킨다면 명령어의 결과값이 출력된다.


    openls="ls -l"

    $openls

    결과 - ls -l의 결과값이 출력된다.


    C. 변수의 해제

    변수값을 삭제할 때는 NULL값으로 준다.

    변수 자체를 삭제하기위해서는 unset 명령어를 사용한다.


    myname=    // 이후 출력시 myname을 불러도 아무것도 출력되지 않는다.

    unset myname2    //변수자체가 삭제되었다.


    9.2 별칭 - alias

    Alias는 하나의 명령어나 명령의 집합에 별명을 붙이는것

    alias ll="ls -l"

    프롬프트에 ll시 ls -l의 결과값이 출력된다.

    alias를 인수없이 사용시 현재 만들어져있는 별칭들이 출력된다.


    9.3 히스토리 - history

    과거 입력했던 명령들의 기록을 볼 수 있다.

    history - 전체 히스토리 목록을 보여줌

    사용했던 명령을 다시 사용하기 위해서는 "![history 번호]"로 이전 명령어들을 사용할 수 있다.

    바로전의 명령을 다시 사용하기 위해서는 "!!"을 사용한다.



    10 - 16. 쉘 프로그램 관련 제어문


    10.1 if문


    * ) IF문은 하나의 fi를 마지막에 반드시 가지고 있으며 그 외의 조건문을 가진항이면 then이 반드시 필요하다.

    * ) 띄여쓰기에 주의하자.

    if [ 조건문 ]

    then

    elif [ 조건문 ]

    then

    else

    fi


    A. 두 변수의 비교

    [ $A -eq $B ]

    A와 B값이 같을 때

    [ $A -ne $B ]

    A와 B값이 다를 때

    [ $A -gt $B ]

    A가 B보다 클 때

    [ $A -lt $B ]

    A가 B보다 작을 때

    [ $A -ge $B ]

    A가 B보다 크거나 같을 때 

    [ $A -le $B ]

    A가 B보다 작거나 같을 때



    B. 파일의 상태를 알기위한 표현방식

    [ -d [directory-name] ]

    디렉터리인 경우

    [ -f [file-name] ]

    파일인 경우

    [ -r [file-name] ] 

    파일이 읽기 가능한 경우

    [ -s [file-name] ]

    파일이 존재하고 크기가 0 이상인 경우

    [ -w [filename] ]

    파일이 쓰기 가능한 경우 

    [-! [option] [filename] ]

    option의 조건이 거짓인 경우


    C. 문자열 변수에 대한 처리

    [ "String1" = "String2" ]

     두 문자열이 같은 경우

    [ "String1" != "String2" ]

    두 문자열이 다른 경우

    [ -z "String" ]

    문자열의 길이가 0인 경우

    [ -n "String" ]

    문자열의 길이가 0이 아닌 경우


    D. EXPR 연산


    사용법

    `expr [인자] [연산] [인자]`


    연산에 가능한 연산자

    |, &, <, <=, >=, >, =, !=, +


    * ) 곱셈 나눗셈 등은 가능하지 않는다.

    * ) 가능하게 하려면 연산자임을 표시하기위해 연산자 앞에 \를 사용한다.


    `expr match "STRING" "[정규표현]"`    // 정규표현을 만족하면 1

    `expr index "STRING" "CHARS"`        // CHARS가 STRING의 몇번째 위치에 있는지

    `expr length "STRING"`                // STRING의 길이 출력


    E. for 문

    for (( 초기값; 조건문; 증감식 ))

    do


    done


    for 변수명 in [list]        //list의 나열의 구분은 띄여쓰기, 혹은 "{}"로 묶은 후 이 안에서 반점으로

    do


    done


    F. While문

    while [ 조건문 ]        //무한반복하고싶으면 1을 사용한다.

    do


    done


    G. Until문

    until [ 조건문 ]        //위와다르게 조건문이 거짓일때만 실행된다.

    do


    done


    H. continue, break

    다른언어의 continue, break와 동일하다.


    I. case문


    case $[변수] in

    [조건])        //조건에는 문자열, 숫자 등 가능하다.

    //조건에서 or 연산을 하고싶다면 "["를 사용한다.

    //ex ) q|Q) <- q나 Q이면

    실행문

    끝날때;;


    [조건2])

    실행문

    끝날때;;


    *)            // 그외의 모든것

    실행문

    끝날때;;



    17, 18. 인수(Argument)처리


    $$ - PID

    $1, $2 - 인수

    $* - 모든인수

    $# - 인수의 개수

    $? - exit status, 즉 앞의 명령어의 수행결과가 에러면 1, 에러가 아니면 0

    # comment - 주석을 달 때


    19. 원격지 로그인(login)


    telnet - 23

    rlogin - 513

    ssh - 22


    20. 파일전송 서비스


    단답형

    - 최근 4문항 실습과제 중 한가지에서 쉘 프로그램으로 표현된 프로그램의 빈칸을 채우는 형식

    '고사' 카테고리의 다른 글

    PHP  (0) 2017.10.11
    자료구조  (0) 2017.10.06
    암호학  (0) 2017.10.01
    JAVA  (0) 2017.09.27
    인터넷 보안  (0) 2017.09.21
    Posted by Config