Linux/리눅스 실무의 이해

02-04-03 셸 스크립트의 조건문

easyfly 2022. 1. 21. 08:00
반응형

02-04-03 셸 스크립트의 조건문

if 문

  • if문의 표현식이 참이면 then 구문의 명령문이 실행이 됩니다. 그렇지 않으면 fi 구문 이후의 명령문이 실행됩니다. if 구문의 표현식은 '['과 ']' 사이에 공백을 둬야 합니다.
  • if-else문의 표현식이 참이면 then 구문의 명령문을 실행하고 그렇지 않으면 else 구문의 명령문을 실행합니다.
  • if-elif-elif-fi문은 if 구문의 표현식이 참이면 then 이하의 명령문을 실행하고 그렇지 않으면 elif 구문 이하의 표현식이 참인지 확인한다. 참이면 then 구문 이하의 명령문을 실행하고 그렇지 않으면 else 구문 이하의 명령문을 실행한다.
  • if-then-else-if-then-fi-fi문(중첩 if문)은 if의 표현식이 참이면 then 이하의 명령문을 실행하고 그렇지 않으면 else 이하의 구문을 실행한다. 그리고 그 명령문은 동일한 if 구문을 중첩하여 실행할 수 있다.
  • if 구문에서 첫 번째 인자가 "cool"이라면 then 이하의 구문 "Cool wind"를 화면에 출력한다. 그렇지 않다면 첫 번째 인자가 "warm"과 같은지 확인하고 가다면 then 이하의 구문 "warm wind"를 출력한다. 그렇지 않으면 "Not warm wind"를 출력한다.
  • #!bin/bash

    if [ "$1" = "cool" ]
    then
        echo "cool wind"
    elif [ "$1" = "warm" ]
    then
        echo "warm wind"
    else
        echo "Not warm wind"
    fi

case 문

  • case문은 $ 변수와 상응하는 패턴의 명령문을 실행한다.
  • $NOW가 "Mon'이라면 "Full backup"을 출력하고, Tue, Wed, Thu, Fri 중에 하나라면 "Partial backup을 출력한다. Sat, Sun이라면 "No Backup"을 출력한다. 그 외라면 "Error"를 출력한다.
  • #!/bin/bash
    NOW=$(date + "%a")
    case $NOW in
        Mon)
            echo "Full backup";;
        Tue|Wed|Thu|Fri)
            echo "Partial backup";;
        Sat|Sun)
            echo "No backup";;
        *)
    echo "Error";;
    esac

셸 스크립트의 반복문

for 문

  • 변수에 값 1을 할당하고 명령문을 실행하고, 변수에 값 2를 할당하고 명령문을 실행한다. in 구문 이하의 값을 모두 순차적으로 할당할 때마다 명령문을 실행한다.
  • for $변수 in 값1, 값2
        do
            명령문
        done
  • 변수 i에 1을 할당하고 "Loop ... number $i"를 출력하고 변수 1에 2를 할당하고 "Loop ... number $i"를 출력한다. 순차적으로 i에 3, 4, 5를 할당하고 마찬가지로 echo 문을 실행한다.
  • #!/bin/sh
    for i in 1 2 3 4 5
    do
        echo "Looping ... number $i"
    done

while 문

  • 표현식이 참일 동안 do와 done 사이의 명령문을 실행한다. 표현식이 거짓일 경우 반복문을 종료한다.
  • while 표현식
    do
        명령문
    done
     
  • INPUT_STRING 변수에 bye가 입력될 때까지 "You typed : $INPUT_STRING"을 출력한다. bye가 입력되면 반복문을 종료한다.
  • #!/bin/sh
    INPUT_STRING=hello
    while [ ""$INPUT_STRING" != "bye" ]
    do
        echo "Please type something in (bye to quit)"
        read INPUT_STRING
        echo "You typed: $INPUT_STRING"
    done

until 문

  • 표현식이 만족할 때까지 명령문을 실행한다.
  • until 표현식
    do
        명령문
    done
  • 변수  i가 6보다 클 때까지 "Welcome $i times."를 출력한다.
  • #!/bin/bash
    i=1
    until [ $i -gt 6 ]
    do
            echo "Welcome $i times."
            i=$(( i+1 ))
    done
  • 다음은 위의 셸 스크립트 실행 결과이다.
  • Welcome 1 times.
    Welcome 2 times.
    Welcome 3 times.
    Welcome 4 times.
    Welcome 5 times.
    Welcome 6 times.

select 문

  • 메뉴 중 숫자로 항목을 선택하고 그에 대응하는 명령어를 수행하기 위한 반복문이다.
  • select $변수 in 메뉴1 메뉴2 메뉴3 ...
    do
        수행할 명령어
    done
  • who 또는 whoami 메뉴 항목을 숫자로 선택하면 해당 명령어를 실행하고 quit 메뉴 항목의 숫자를 선택하면 셸을 종료한다.
  • #!/bin/bash
    select menu in who whoami quit
    do
        case $menu in
        who) who;;
        whoami) whoami;;
        quit) break;;
        *) echo "whong menu item";;
        esac
    done

셸 스크립트의 함수

함수 구문 문법

  • 함수의 정의는 function 지시어를 통해 함수 이름을 선언하고 함수가 수행할 명령문을 기술한다.
  • function 함수 이름
    {
        명령문
    }
  • 함수의 호출은 함수 이름을 명시하여 호출한다.
  • #!/bin/bash
    함수 이름
  • "Oh! Aactually, it works"를 출력하는 myfunction을 정의하였고 호출할 때는 함수 이름을 그대로 사용하였다.
  • myfunction()
    {
        echo "Oh! Actually, it works"
    }
    myfunction

셸 스크립트의 부분 문자열 제거

스트링과 패턴을 비교하여 배정된 문자열을 소거하는 4가지 방법

  • 스트링과 패턴을 비교하여 매칭 된 문자열을 소거하는 4가지 방법이 있다.
    • ${string#pattern}: 맨 앞부터 패턴과 가장 짧게 매치된 문자열을 지운다.
    • ${strring##pattern}: 맨 앞부터 패턴과 가장 길게 매치된 문자열을 지운다.
    • ${string%pattern}: 맨 뒤부터 패턴과 가장 짧게 매치된 문자열을 지운다.
    • ${string%%pattern}: 맨 뒤부터 패턴과 가장 길게 매치된 문자열을 지운다.

문자열의 앞부터 A로 시작해서 1로 종료하는 패턴 중 가장 짧은 매칭을 삭제하거나 가장 긴 매칭을 삭제한다.

  • STR=ABC123abc123ABC
    #    | - - |             가장 짧은 문자열 (#) ABC123abc123ABC
    #    | -------- |       가장 긴 문자열 (##) ABC123abc123ABC
    echo ${STR#A*1}    # 23abc123ABC
    echo ${STR##A*1}  # 23ABC

문자열의 뒤부터 3으로 시작해서 C로 종료하는 패턴 중 가장 짧은 매칭을 삭제하거나 가장 긴 매칭을 삭제한다.

    • STR=ABC123abc123ABC
      #    | - - |             가장 짧은 문자열 (%) ABC123abc123ABC
      #    | -------- |       가장 긴 문자열 (%%) ABC123abc123ABC
      echo ${STR%3*C}    # ABC123abc12
      echo ${STR%%3*C}  # ABC12
버츄얼머신 CentOS에서 실습


반응형

'Linux > 리눅스 실무의 이해' 카테고리의 다른 글

03-01-02 네트워크 기초_네트워크 장비  (0) 2022.01.23
03-01-01 네트워크의 기초  (1) 2022.01.22
02-04-02 셸 프로그래밍  (0) 2022.01.20
02-04-01 셸(Shell)  (0) 2022.01.17
02-03 X 윈도우  (0) 2022.01.15