ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Shell Script - 1
    공부합시다!/LInux 2023. 2. 9. 00:14
    728x90

    자! 드디어 엔지니어에게 필수인 스크립트 부분입니다.

    너무 간단하지도 너무 복잡하지도 않게 진행하도록 하겠습니다.

    단 정규 표현식은 자주자주 접하셔서 익숙해 지도록 하셨으면 좋겠습니다.

     

    1. 의의

    2. 스크립트

    순으로 진행합니다.

     

    1. 의의

     1.1. Bash 쉘 스크립트는 명령 목록이 포함된 실행 파일로, 프로그래밍 논리와 함께 전체 작업의 의사 결정을 제어.

     1.2. 잘 작성된 쉘 스크립트는 그 자체가 강력한 명령줄 도구이며, 다른 스크립트와 함께 사용 가능.

     1.3. 쉘 스크립팅을 능숙하게 다루는 능력은 모든 작업 환경의 시스템 관리자에게 필수.

     1.4. 쉘 스크립트를 사용하면 일상적인 작업을 더 효율적이고 정확하게 완료할 수 있음

     

    2. 스크립트

     2.1. command interpriter 지정

      2.1.1.스크립트의 첫 번째 행은 '#!' 표기법으로 시작.

      2.1.2. '#!'은 일반적으로 두 문자의 이름인 she-bang 또는 hash-bang을 따서 sharp 또는 hash bang이라고 함.

      2.1.3. 이 표기법은 파일의 나머지 줄을 처리하는 데 필요한 명령 인터프리터 및 선택적 명령 옵션을 나타내는 인터프리터 지시문입니다.

    #! /bin/bash
    #! /bin/sh
    #! /usr/bin/bash

     2.2. Script 실행

      2.2.1. 쉘 스크립트 파일을 일반 명령으로 실행하려면 실행 권한 필요.

    # chmod ugo+x 파일명

      2.2.2. 필요한 경우 chown 명령을 사용하여 특정 사용자 또는 그룹에만 실행 권한을 부여.

     2.3. 특수 문자

      2.3.1. Bash 쉘에서 특별한 의미를 갖는 문자와 단어가 존재.

      2.3.2. 이러한 문자를 특별한 의미가 아닌 리터럴 값으로 사용해야 하는 경우 스크립트에서 해당 문자를 이스케이프

      2.3.3. 백슬래시 문자(\), 작은따옴표('') 또는 큰따옴표("")를 사용하여 이러한 문자의 특수한 의미를 제거(또는 이스케이프)

      2.3.4. 백슬래시 이스케이프 문자는 바로 다음에 오는 단일 문자의 특별한 의미를 제거합니다.

      2.3.5. ex) echo 명령을 사용하여 # not a comment 리터럴 문자열을 표시하려면 # 해시 문자를 주석으로 해석 못하게

    # echo # hello linux
    
    # echo \# hello linux
    # # hello linux

      2.3.6. 텍스트 문자열에서 두 개 이상의 문자를 이스케이프하여 문자 그대로 해석하려면

       2.3.6.1 백슬래시 문자를 여러 번 사용

       2.3.6.2. 전체 문자열을 작은따옴표(' ')로 묶음. 작은따옴표를 사용하면 포함된 모든 문자의 리터럴 의미가 유지됨.

    # echo # hello linux #
    
    # echo \# hello linux #
    # # hello linux
    # echo \# not a comment \#
    # # hello linux #
    # echo '# hello linux #'
    # # hello linux #

    큰따옴표는 globbing(파일 이름 패턴 일치) 및 shell expansion을 억제하는 데 사용하지만, 명령 및 변수 대체는 계속 가능합니다. 변수 대체는 개념상 명령 대체와 동일하지만 선택 사항인 중괄호 구문을 사용할 수도 있습니다. 아래에서 다양한 따옴표 형태의 예를 확인할 수 있습니다.

    포함된 모든 텍스트를 문자 그대로 해석하려면 작은따옴표를 사용합니다. 작은따옴표는 글러빙과 쉘 확장을 억제하는 것 외에도 쉘이 명령 및 변수 대체도 억제하도록 지시합니다. 물음표(?)도 확장에서 이스케이프해야 하는 메타 문자이므로 따옴표 안에 포함됩니다.

    # var=$(hostname -s); echo $var
    # localhost
    
    # echo "***** hostname is ${var} *****"
    # ***** hostname is localhost *****
    
    # echo Your username is \$USER.
    # Your username is $USER.
    
    # echo "Will variable $var evaluate to $(hostname -s)?"
    # Will variable host evaluate to host?
    
    # echo 'Will variable $var evaluate to $(hostname -s)?'
    # Will variable $var evaluate to $(hostname -s)?
    
    # echo "\"Hello, world\""
    # "Hello, world"
    
    # echo '"Hello, world"'
    # "Hello, world"

     

     

     2.4. Shell Script 출력

      2.4.1. echo 명령은 텍스트를 명령에 인수로 전달하여 임의 텍스트를 출력.

      2.4.2. 기본적으로 텍스트는 표준 출력(STDOUT)으로 전송, 출력 리디렉션을 사용하여 다른 위치로 텍스트를 전송가능

    [root@localhost ~]# mkdir bin
    [root@localhost ~]# vi bin/babo
    #!/bin/bash
    
    echo "Hello, Linux"
    :wq
    
    [root@localhost ~]# env | grep PATH
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:
    /root/bin 디렉토리가 PATH 경로에 존재함으로 babo 실행 가능
    
    [root@localhost bin]# chmod u+x babo
    [root@localhost bin]# babo
    Hello, Linux

    다음시간에는 간단한 for, if, while문에 대해서 살펴보겠습니다.

     

     

     

    728x90
Designed by Tistory.