Bash의 매개변수 구문 분석

Bash의 매개변수 구문 분석

기본적으로 파일을 구문 분석하는 스크립트가 있습니다. 이 스크립트를 실행할 때 두 개의 플래그를 설정하고 싶습니다.

다음은 두 가지 경우입니다. --hello-you플래그를 설정한 다음 그 뒤에 두 개의 필수 매개변수를 사용하고 싶습니다. ./script.sh --hello-you <FILE> <PATH>

-h or --help도움말 매뉴얼을 제공하고 싶습니다 . ./script.sh --help또는 ./script.sh -h -h 또는 --help를 사용하여 사례 $1을 전달하는 것이 쉽다는 것을 알고 있지만 문제는 사용자가 --hello-you프로그램을 누를 때 다음과 같이 인식된다는 것입니다.-h

답변1

긴 옵션을 잊어버리고 이를 사용하여 이 작업을 수행하는 것이 더 낫습니다 getopts. 그렇지 않으면 다음과 같이 위치 매개변수를 반복할 수 있습니다.

#!/bin/bash

usage () {
    cat <<EOF >&2
    Usage: $(basename "$0") [-h] --hello-you FILE PATH
EOF
    exit 1
}

while (($#)); do 
    case $1 in
        --hello-you)
            file=$2
            path=$3
            shift 2
            [[ -z "$file" || -z "$path" ]] && usage
        ;;
        -h|--help)  usage;;
        *)          usage;;
    esac
    shift
done

echo "File is $file"
echo "Path is $path"

이전에 무엇을 시도하셨는지 잘 모르겠지만 사례가 --hello-you그런 식으로 해석되지는 않습니다 -h. 어쩌면 귀하의 사례와 비슷한 것이 있을까요 --h*)?

또한 이는 파일인지 여부가 아니라 합계가 설정되어 있는지 확인하는 것일 뿐이지 filepath스크립트가 실행되기 전에 해당 합계가 존재하도록 할지 여부에 따라 이를 수행할 수도 있습니다. 또한 --hello-you의도한 것인지 확실하지 않기 때문에 설정이 전혀 필요하지 않습니다 .

관련 정보