Shell Script (6): 조건 부 분기 문 2

3862 단어
저작권 은 작가 의 소유 이 며, 어떠한 형식의 전재 도 작가 에 게 연락 하여 권한 을 수 여 받 고 출처 를 밝 혀 주 십시오.
       이 글 은 케이스 조건 의 분기 문 구 를 설명 한다.다 중 분기 조건 판정 장면 에 서 는 if 조건 분기 문 구 를 사용 하여 스 크 립 트 를 작성 할 수 있 지만 그다지 우아 해 보이 지 않 을 수 있 습 니 다. 이 럴 때 케이스 조건 분기 문 구 를 사용 하 는 것 을 고려 할 수 있 습 니 다.       설명 을 편리 하 게 하기 위해 먼저 이러한 장면 을 허구 한다. 프로그램 이 사용자 와 상호작용 을 할 때 프로그램 은 사용자 의 입력 에 따라 터미널 에서 해당 하 는 출력 을 해 야 한다.       사용자 의 입력 이 1 일 때 프로그램 은 터미널 에서 1 을 출력 합 니 다.       사용자 의 입력 이 2 일 때 프로그램 은 터미널 에서 2 를 출력 합 니 다.       사용자 의 입력 이 3 일 때 프로그램 은 터미널 에서 3 을 출력 합 니 다.       사용자 의 입력 이 1 도 아니 고 2 도 아니 고 3 도 아 닐 때 프로그램 은 터미널 에서 You did not enter a number between 1 and 3 을 출력 합 니 다.        if 조건 분기 문 구 를 사용 하면 스 크 립 트 는 다음 과 같 습 니 다.
#!/bin/bash

echo -n "Enter a number between 1 and 3 inclusive > "
read character
if [ "$character" = "1" ]; then
    echo "You entered one."
elif [ "$character" = "2" ]; then
    echo "You entered two."
elif [ "$character" = "3" ]; then
    echo "You entered three."
else
    echo "You did not enter a number between 1 and 3."
fi

        위의 이러한 표기 법 은 우리 가 필요 로 하 는 기능 을 충분히 실현 할 수 있 지만 if... elif. else... 의 사용 횟수 가 많 고 코드 가 비대 해 보 입 니 다. 이때 우리 가 case 조건 분기 문 구 를 선택 하면 스 크 립 트 는 다음 과 같 습 니 다.
#!/bin/bash

echo -n "Enter a number between 1 and 3 inclusive > "
read character
case $character in
    1 ) echo "You entered one."
        ;;
    2 ) echo "You entered two."
        ;;
    3 ) echo "You entered three."
        ;;
    * ) echo "You did not enter a number between 1 and 3."
esac

        이 스 크 립 트 는 첫 번 째 스 크 립 트 와 같은 기능 을 실 현 했 지만 훨씬 시원해 보 였 다.이것 이 바로 케이스 조건 분기 문장의 역할 이다.        다음은 케이스 조건 분기 문장의 사용 방법 을 간단하게 소개 합 니 다.
case word in
    pattern1 ) command1 ;;
    pattern2 ) command2 ;;
    ...
    patternn ) commandn ;;
esac

        스 크 립 트 는 실행 할 때 워드 의 형식 을 아래 의 첫 번 째 부터 n 번 째 pattern 모드 와 일치 시 킵 니 다. 일치 하 는 데 성공 하면 해당 pattern 뒤의 명령 을 실행 하고 후속 pattern 과 패턴 을 일치 시 키 지 않 습 니 다.예 를 들 어 워드 의 모드 가 두 번 째 pattern 의 모드 와 일치 하면 프로그램 은 두 번 째 pattern 뒤의 명령 을 실행 합 니 다. 이 때 워드 가 두 번 째 pattern 뒤의 특정한 pattern 과 일치 하 더 라 도 프로그램 은 어떠한 동작 도 하지 않 습 니 다.        여기에 주의해 야 할 두 가지 가 있다.       1. patterns 는 Shell 의 정규 표현 식 으로 자바 나 python 의 정규 표현 식 과 차이 가 있 습 니 다.셸 정규 표현 식 에 대한 지식 을 더 알 고 싶 으 면 관련 튜 토리 얼 을 검색 할 수 있 습 니 다.       2. 두 개의 분점 의 사용 에 주의 하고 한 개의 분점 만 사용 하면 잘못 보고 할 수 있 습 니 다.
       case 조건 분기 문장의 사용 방법 을 알 게 된 후에 약간 복잡 한 예 를 보 여 줍 니 다.       (1) 사용자 가 단일 알파벳 을 입력 했 을 때 프로그램 은 터미널 에서 You typed the letter 를 출력 합 니 다.       (2) 사용자 가 단일 숫자 를 입력 했 을 때 프로그램 은 터미널 에서 You typed the digit 를 출력 합 니 다.       (3) 사용자 가 다른 내용 을 입력 할 때 터미널 에서 프로그램 출력 You did not type a letter or a digit       이 기능 을 구현 하 는 스 크 립 트 는 다음 과 같 습 니 다.
#!/bin/bash

echo -n "Type a digit or a letter > "
read character
case $character in
                                # Check for letters
    [[:lower:]] | [[:upper:]] ) echo "You typed the letter"
                                ;;

                                # Check for digits
    [0-9] )                     echo "You typed the digit"
                                ;;

                                # Check for anything else
    * )                         echo "You did not type a letter or a digit"
esac

       이 스 크 립 트 도 간단 합 니 다. 만약 에 독자 가 이 코드 를 볼 때 어려움 을 느낀다 면 정규 표현 식 부분 을 잘 보지 못 할 수도 있 습 니 다.하지만 괜 찮 습 니 다. 여기 가 case 조건 분기 문 구 를 다 루 는 사용 방법 이라는 것 만 알 아야 하기 때 문 입 니 다. 이것 만 알 면 지식 공유 의 목적 을 달성 할 수 있 습 니 다.셸 의 정규 표현 식 인지, 아니면 그 말 인지 알 고 싶다 면 관련 튜 토리 얼 을 검색 해서 배 울 수 있 습 니 다.
관련 문서
http://linuxcommand.org/lc3_wss0110.php
이전 편: Shell Script (5): 상호작용 과 산수 연산 다음 편: Shell Script (7): 순환 (for, while, until)

좋은 웹페이지 즐겨찾기