[현학 현 망 & Shell 프로 세 스 제어] - 45. case 조건문

4270 단어
1. case 조건문 소개case 문장 과 if…elif…else 문장 은 모두 다 분지 조건문 이지 만 if 다 분지 조건문 과 달리 case 문장 은 하나의 조건 관계 만 판단 할 수 있 고 if 문장 은 여러 가지 조건 관 계 를 판단 할 수 있다.case 구문 문법 은 다음 과 같다.
case $    in
    " 1")
                 1,     1
        ;;
    " 2")
                 2,     2
        ;;
    
    …      …
    
    *)
                     ,      
        ;;
esac  ( :case   )

설명:case 문장 과 if…elif…else 문장의 차이 점:case 문구 에서 하나의 조건 (값) 만 판단 할 수 있 고 특정한 상황 (값) 에 부합 되 는 지 여 부 는 판단 이다.
한편, if…elif…else 문 구 는 전편 의 예제 에 따라 if 다 분기 조건 문 구 를 볼 수 있 고 하나의 입력 이 비어 있 는 지, 파일 인지, 디 렉 터 리 인지 등 여러 가지 조건 관 계 를 판단 할 수 있 으 며 서로 다른 판단 이다.
2. case 문구 에 주의해 야 할 내용
  • case 문 구 는 변수 중의 값 을 추출 한 다음 에 문체 중의 값 과 하나씩 비교 합 니 다.수치 가 맞 으 면 해당 하 는 프로그램 을 실행 하고 수치 가 맞지 않 으 면 다음 값 을 순서대로 비교 합 니 다.모든 값 이 맞지 않 으 면 실행 *) 의 프로그램 을 실행 하고 *) 은 모든 다른 값 을 대표 합 니 다.
  • case 문 구 는 “case” 로 시작 하여 “esac” 로 끝난다.
  • 모든 분기 프로그램 이 끝 난 후에 ;; 더 블 분 호 를 통 해 끝 나 는 것 은 이 프로그램의 끝 을 나타 낸다.

  • 3. 연습
    예시 1
    #!/bin/bash 
    
    #           
    echo "want to beijing,please input 1."
    echo "want to shanghai,please input 2."
    echo "want to chendu,please input 3."
    
    #        ,     cho
    read -t 30 -p "please input your choice: " cho 
    
    # case    
    case $cho in 
        "1") 
            echo "to beijin"
            ;;
        "2")
            echo "to shanghai"
            ;;
        "3") 
            echo "to chendu"
            ;;
        *) 
            echo "error input"
            ;;
    esac
    

    예시 2
    이전 글 if 다 분기 조건 문 구 를 컴퓨터 연습 에서 3 층 if 내장 을 케이스 문 으로 바 꾸 어 실현 합 니 다.
    #!/bin/bash
    #            。
    
    # 1.  read          ,     num1 num2
    read -t 30 -p "Please input num1: " num1
    read -t 30 -p "Please input num2: " num2
    
    # 2.  read          ,     ope.
    read -t 30 -p "Please input a operator: " ope
    
    #      
    #     num1、num2 ope    。
    # -n  :            ,    。
    # -a  :   。
    if [ -n "$num1" -a -n "$num2" -a -n "$ope" ]
        then
            #      num1 num2         
            #                     ,           。     
            #     test1 test2   $(  )   。
            test1=$(echo $num1 | sed 's/[0-9]//g')
            test2=$(echo $num2 | sed 's/[0-9]//g')
            
            #   :
            #     sed  ,   num1        ,   0-9   ,     。
            #     test1      ,  num1           ,        。
            #   test1       ,  num1          , num1    。
            
            #      ,    num1 num2   。
            #     test1 test2    ,   numl num2   .
            # -z  :         (     )
            # -a  :   。
            if [ -z "$test1" -a -z "$test2" ]
                then
                    #   test1 test2   ,       。
                    
                    #             。
                    #     $ope       。
                    case $ope in 
                        "+") 
                            #             。
                            value=$(($num1+$num2))
                            ;;
                        "-")
                            #      ,       。
                            value=$(($num1-$num2))
                            ;;
                        "*")
                            #      ,       。
                            value=$(($num1*$num2))
                            ;;
                        "/") 
                            #      ,       。
                            value=$(($num1/$num2))
                            ;;
                            
                        *) 
                            #         ,         
                            echo "Please enter a valid symbol."
                            #      ,      10。
                            exit 10
                            ;;
                    esac        
            else
                #   test1 test2   ,  numl num2    。
                #           。
                echo "Please enter a valid value."
                #      ,      11。
                exit 11
            fi
    
    else 
        echo "qing input neirong."
        exit 12
    fi 
    
    #          。
    echo "$num1 $ope $num2 :$value"
    
    

    좋은 웹페이지 즐겨찾기