쉘 & 쉘스크립트

    Shell

    shell 사용

    Section 번호 8영역 설명
    1 실행 가능한 프로그램 또는 쉘 명렁어
    2 시스템 콜 (System Calls)
    3 라이브러리 콜 (Libaries Calls)
    4 특수 파일 (Specail files)
    5 파일 형식과 규칙 (File format & conventions)
    6 게임 (Games)
    7 개요, 규칙 및 기타
    8 슈퍼 유저 및 시스템 관리 명령
    9 커널 루팅 (Kernel routines)

     

    shell 종류

    shell 의 종류 특징 프롬프트
    bash
    Bourne Again shell
    최초로 개발된 shell 인 Boure shell 의 변종
    리눅스에서 가장 많이 사용되는 IEEE POSIX 호환이면 Boure shell과 호환되는 shell 로 GNU 프로젝트에 의해 만들어지고 배포되고 있음
    $
    sh
    Bourne shell
    c shell 이나 Korn shell 과 기능적인 면들 비교해보면 미흡한 점이 있음.
    그 중 가장 큰 단점은 상호 대화형(Interactive) 방식을 취하고 있지 않다는 점

    실습  스크린샷의 dash 에 링크된 sh 와는 별개의 것!! (헷갈리지 말자!!)
    $
    csh
    C-Program Style shell
    버클리 캘리포니아 대학에서 개발된 프로그래머들에게 적합한 shell.
    대화형 사용법에서는 Bourne shell 과 대부분 호환되지만 전혀 다른 프로그래밍 인터페이스를 가지고 있음
    %
    ksh
    Korn shell
    일반적으로 유닉스에서 가장 많이 사용되고 있는 shell, Bourne shell 에 처음으로 현대적인 shell 기능(C shell 로 부터 차용한 것)을 도입한 shell $
    zsh Korn shell 과 매우 유사한 shell 이지만 Korn shell 보다 더 많고 유용한 기능들을 추가해 개선시킨 것 %
    Super user   #
    Shell 이 다르다는 것은?  
    >>>  명령어의 일부 문법 달라진다
    >>> Ex: sh 는 old version 이라 "./" 사용 불가 (dash 아님!!)


    설치된 shell 확인하기

    방법1

    cat /etc/shells

    >> sh, bash, rbash, dash

     

    방법2 - /bin 에서 'sh ' 가 포함된 파일을 조회 (shell 은 이름에 sh 포함시킴)

    ls *sh* -l

    >> bash, dash (link 는 제외하고 생각)

    * 주의
    sh 실행시 sh 는 dash 에 링크된 것이므로 dash 가 실행되고 있다!!


    Shell script

    • Command 의 Batch 화를 위해 사용됨 (실행할 command 를 나열한 것)
    • comment (주석)
      • '#': 일반 comment
      • '#!': shebang (특수 Symbol)
        • shell script 를 실행할 shell 의 종류를 명시!! (어떤 문법으로 쓸 지 설정)
        • 단, Commend line 이 우선권이 있으므로 실행 시 다른 shell 을 이용한 명령을 주면 안 됨!!!
          • sebang 을 보고 실행시키는 것이 상식!!!
    #!/bin/bash
    
    date
    who
    • 확장자
      • 일반적으로 .sh 로 설정하지만, linux 에서는 굳이 확장자가 없더라도 permission 만 정확하면 실행할 수 있다.
      • .sh 를 쓰는 이유: 구분하기 위해

    •  만들기
      • linux 에서 gedit 로 만들기만 하면 권한이 없는 상태이므로 반드시 permission 을 부여해주고 실행 하자

    •  subshell
      • shell 파일은 log-in shell 이 아닌 subshell 에서 실행된다
      • 예시1
        • sh .bashrc: subshell 에서 실행됨 >> log-in shell 에 적용되지 않음
        • source .bashrc: log-in shell 에서 실행 >> log-in shell 에 적용됨 (alias aa='ls -a' 추가)
      • 예시2
        • my_name 이라는 변수를 terminal 에서 선언 (log-in shell)
        • 04.user_var.sh 를 통해 my_name 을 선언 (sub shell)
        • 서로 영향을 주지 않음 >> log-in shell 의 my_name 값은 유지됨!!

    예시2

    • 리눅스 종료 상태 ($?) 코드 (p161)
      • 쉘 명령어 실행 결과를 표시하는 변수
      • log-in shell 에 지정된 환경 변수
    코드 설명
    0 명령이 성공적으로 완료됨
    1 일반 알 수 없는 오류
    2 쉘 명령을 잘못 사용함
    126 명령을 실행할 수 없음
    127 명령을 찾을 수 없음
    128 잘못된 종료 매개변수
    128+x 치명적인 오류로 리눅스 신호 x를 포함
    130 ctrl+c 로 명령이 종료됨
    255 범위를 벗어난 종료 상태

     

    Shell Variables (쉘 변수)

    • Shell 은 시스템의 특정 정보를 추적하기 위해 변수를 유지 관리한다
      • 변수 값을 사용하고자 하는 경우: $<name> 으로 사용
      • 변수 삭제: unset <name>
      • 스페이스 바를 포함하는 여러 단어를 변수에 저장할 때: " " 를 사용
    • 사용자 변수
      • shell script 는 변수 값에 사용되는 데이터 유형을 자동으로 결정한다
      • shell script 내에서 정의된 변수는 shell script 의 수명 내내 값을 유지하지만 완료되면 삭제된다
    • 환경 변수
      • shell 이 특별히 관리하는 변수
        • 시스템 이름
        • 시스템에 로그인한 사용자 이름
        • 사용자 UID 등등
      • 사용 가능한 활성 환경변수 목록 출력
        • 'set'
      • 기본 환경 변수
    환경 변수 설명
    HOME 현재 사용자의 home directory
    PATH shel 이 명령을 찾을 때 사용할, 콜론으로 구분된 directory 목록
    PS1 기본 shell command line interface prompt 문자열
    PS2 보조 shell command line interface prompt 문자열
    BASH 현재 bash shell 의 인스턴스를 실행하기 위한 전체 경로 이름
    BASH_VERSION bash shell 의 현재 인스턴스의 버전 번호
    BASHPID 현재 bash shell 의 인스턴스의 프로세스 ID
    HISTFILE shell 의 히스토리 목록을 저장하는 파일의 이름 (.bash_history)
    HISTFILESIZE 히스토리 파일에 저장되는 줄의 최대 수
    HISTSIZE 히스토리 파일에 저장되는 명령어의 최대 수
    HOSTNAME 현재 호스트의 이름
    HOSTTYPE 호스트 머신의 유형
    OSTYPE shell 이 실행되고 있는 운영체제의 유형
    LANG shell 의 로케일 범주
    PWD 현재 작업 디렉토리
    SHELL Bash shell 의 전체 경로 이름
    SHELLOPTS 사용할 수 있는 bash shell 의 옵션 목록으로 콜론으로 구분됨
    UID 현재 사용자에 대한 숫자로 된 실제 사용자 ID
    PPID Bash shell 의 부모 프로세스의 ID (PID)
    LINES 터미널에서 사용가능한 줄의 수
    IFS 쉘이 텍스트 문자열을 분할할 떄 사용하는, 필드를 구분하는 문자들의 목록

     

     

     

     

    '개발자라면? > Linux' 카테고리의 다른 글

    Make 빌드 시스템 2  (0) 2022.09.02
    Make 빌드 시스템 1  (0) 2022.09.02
    라이브러리의 동작과 제작  (0) 2022.09.02
    GNU  (0) 2022.09.02
    리눅스 아키텍처와 명령어 (Ft. file system)  (0) 2022.09.01

    댓글

    Designed by JB FACTORY