Bash 스크립트 뒤에 제공되는 옵션은 명령줄 인수를 허용합니다.

Bash 스크립트 뒤에 제공되는 옵션은 명령줄 인수를 허용합니다.

여러 개의 선택적 플래그와 두 개의 필수 매개변수를 허용하는 bash 스크립트가 있습니다. 현재 명령줄 호출이면 ~/script.sh -a -b arg1 arg2제대로 작동하지만 호출이면 ~/script.sh arg1 arg2 -a -b인식하지 못하고 설정 -a됩니다 -b. 간단한 예는 다음과 같습니다.

#!/usr/bin/env bash
while :; do
    case $1 in
        -a)
            flag_a=true
        ;;
        -b) 
            flag_b=true
        ;;
        *) ## cause of problem: breaks the loop when the first argument is encountered
            break
    esac
    shift
done
arg_1=$1
arg_2=$2
if [ -z ${arg_1:+x} ] || [ -z ${arg_2:+x} ]; then
    echo -e "\n:-( ERROR: two arguments are required" | tee -a /dev/tty 1>&2
    exit 1
fi
flag_a=${flag_a:-false}
flag_b=${flag_b:-false}
if [ "$flag_a" = true ]; then
    echo "arg_1 is $arg_1"
fi
if [ "$flag_b" = true ]; then
    echo "arg_2 is $arg_2"
fi
if [ ! "$flag_a" = true ] && [ ! "$flag_b" = true ]; then
    echo "no options set"
fi
exit 0

필수 매개변수 뒤에 나열된 선택적 플래그를 허용하는 방법이 있습니까? 발견된 매개변수를 어떻게든 저장 *)하고 루프를 $*완료한 후 배열에 다시 추가할 수 있습니까?while

관련 정보