필수 매개변수를 1개만 스크립트에 전달해야 합니다.

필수 매개변수를 1개만 스크립트에 전달해야 합니다.

저는 쉘 스크립트를 작성 중이며 getopts를 사용한 매개변수 구문 분석이 처음입니다. 1개의 선택적 매개변수와 2개의 필수 매개변수가 있습니다. 제가 원하는 것은 단 하나의 필수 매개변수만 전달되도록 하는 것입니다. 기본 검증은 현재 존재하지만 장기적으로는 사실상 쓸모가 없습니다. if 조건을 사용하여 다른 예제를 살펴봤지만 역시 실패했습니다. 케이스에 플래그를 사용하고 개별 상태를 확인하여 함수를 호출하면 모든 것이 인쇄됩니다. 내가 원하는 것은 1개의 필수 매개변수만 사용되도록 하고, 2개 이상의 매개변수가 전달되면 오류를 발생시키는 것입니다. 이제 모든 옵션이 지정된 순서대로 실행됩니다. 이것은 코드입니다

#!/bin/bash

USAGE="Usage : $0 [-r N] (-a|-b)"

#Prompts when there are no arguments passed
if [ "$#" -le 0 ]; then
    echo $USAGE
    exit 2
fi

#the option parsing
while getopts ':n:ab' option
do
    case $option in
        r)
            numlim=$OPTARG
            ;;
        a)
            task1
            ;;

        b)
            task2
            ;;

        *)
            echo "Unknown Param"
            echo $USAGE
            ;;
    esac
done

내가 원하는 것은 특정 방식으로 코드를 디자인하는 방법에 대한 팁입니다.

답변1

루프에서 실행할 작업을 결정하는 변수를 설정한 getopts다음 하나의 작업만 선택되었는지 수동으로 확인합니다. 다음과 같은 다양한 방법으로 이 작업을 수행할 수 있습니다.

#!/bin/sh
task=
set_task() {
    if [ -n "$task" ]; then
        echo "only one of -a and -b may be used" >&2
        exit 1
    fi
    task=$1
}
while getopts ':n:ab' option; do
    case $option in
        a)  set_task a;; 
        b)  set_task b;;
        *)  echo "unknown option" >&2
            exit 1;;
    esac
done
if [ "$task" = a ]; then
    echo do task a...
elif [ "$task" = b ]; then
    echo do task b...
else
    echo "invalid or unspecified task" >&2
    exit 1
fi

관련 정보