Linux: getopts 명령

5060 단어 linuxgetopts
기능.
기능 은 주로 명령 행 옵션 과 파 라 메 터 를 처리 하 는 데 사 용 됩 니 다.그것 의 장점 은:
  • 외부 프로그램 을 통 해 위치 매개 변 수 를 처리 할 필요 가 없다
  • 셸 의 변 수 를 쉽게 설정 할 수 있 습 니 다
  • POSIX
  • 에서 정의
    일반적으로 명령 행 인 자 를 처리 할 때 순환 을 사용 하고 getopts 를 여러 번 호출 합 니 다.분석 할 내용 이 없 을 때 getopts 는 종료 상태 FALSE 를 설정 합 니 다.
    getopts 에 사용 할 변수
  • OPTIND:
  • 처리 할 매개 변 수 를 저장 하 는 색인
  • OPTARG:
  • 이 변 수 는 getopts 에서 찾 은 옵션 의 인자
  • 로 설정 되 어 있 습 니 다.
  • OPTERR:
  • 이 값 은 0 또는 1 입 니 다. Bash 가 getopts 에서 발생 하 는 오류 정 보 를 표시 해 야 하 는 지 여부

  • 기본 문법:
    getopts OPTSTRING VARNAME [ARGS...]
  • OPTSTRING:
  • getopts 에 어떤 옵션 과 인자 가 있 는 지 알려 줍 니 다 (옵션 으로 추가 합 니 다)
  • VARNAME:
  • getopts 에 옵션 보고서 에 사용 할 변 수 를 알려 줍 니 다 * ARGS:
  • getopts 에 게 매개 변수 위치 가 아 닌 선택 가능 한 매개 변 수 를 분석 하 라 고 알려 줍 니 다

  • Example
    getopts fA:x VARNAME
    #  getopts  -f,-A,-x  ,-A          

    오류 보고 모드
    상세 오류 보고 모드
    자세 한 오류 보고 모드 에서 getopts 가 잘못된 옵션 을 만 났 을 때 VARNAME 의 값 은 '?' 로 설 정 됩 니 다.또한 변 수 는 OPTARGS 가 설정 되 지 않 습 니 다.만약 매개 변 수 를 찾 지 못 하면 VARNAME 의 값 역시 '?' 로 설 정 됩 니 다.변수 OPTARGS 가 설정 되 지 않 고 오류 메 시 지 를 인쇄 합 니 다.
    오류 보고 모드 억제
    오류 보고 억제 모드 에서 getopts 가 잘못된 옵션 을 만 났 을 때 VARNAME 의 값 은 '?' 로 설 정 됩 니 다.또한 변수 OPTARGS 는 옵션 문자 로 설 정 됩 니 다.매개 변 수 를 찾 지 못 하면 VARNAME 의 값 도 ':' 로 설 정 됩 니 다. 변수 OPTARGS 에는 옵션 문자 가 포 함 됩 니 다.
    실례
    #!/bin/bash 
    vflag=off
    filename=""
    output=""
    function usage(){
        echo "USAGE"
        echo "myscript [-h] [-v] [-f <filename>] [-o <filename>]"
        exit -1
    }
    
    while getopts :hvf:o: opt
    do
        case "$opt" in
        v)
            vflag=on
        ;;
        f)
            if [ ! -f $filename ]
            then
                echo "The source file $filename doesn't exist!"
                exit
            fi
        ;;
        o)
            if [ ! -d $output ] 
            then
                echo "The output path 'dirname $output doesn't exist"
                exit
            fi
        ;;
        h)
            usage
            exit
        ;;
        :)
            echo "The option -$OPTARG requires an argument"
            exit 1
        ;;
        ?)
            echo "Invalid option: -$OPTARG"
            usage
        ;;
        esac
    done

    실행 결과
    bigship@bigship-virtual-machine:~/shell_learning/shift$ ./getopts2 -h
    USAGE
    myscript [-h] [-v] [-f <filename>] [-o <filename>]
    bigship@bigship-virtual-machine:~/shell_learning/shift$ ./getopts2 -vf
    The option -f requires an argument
    bigship@bigship-virtual-machine:~/shell_learning/shift$ ./getopts2 -vf /etc/passwd -o /tmp/output.log
    bigship@bigship-virtual-machine:~/shell_learning/shift$ 
    

    좋은 웹페이지 즐겨찾기