![여러 getopts 인수 사용을 거부합니다.](https://linux55.com/image/86009/%EC%97%AC%EB%9F%AC%20getopts%20%EC%9D%B8%EC%88%98%20%EC%82%AC%EC%9A%A9%EC%9D%84%20%EA%B1%B0%EB%B6%80%ED%95%A9%EB%8B%88%EB%8B%A4..png)
상황에서 여러 getopts 인수를 거부하는 방법을 찾으려고 노력 중입니다. 다음과 같은 것이 있다고 가정해 보겠습니다.
while getopts "a:b:c:def" variable; do
case $variable in
a)a=$OPTARG
b)b=$OPTARG
c)c=$OPTARG
d)MODE=SMTH
e)MODE=SMTH2
f)MODE=SMTH3
esac
done
내가 원하는 것은 여러 MODE arg(def)의 사용을 거부하고 사용자에게 이를 알리는 메시지를 표시하는 것입니다. 다음과 같은 것 :
./script.sh -a ajhsd -b kjdhas -c daskjdha -d -e -f
여러 MODE arg(def)가 사용되었는지 확인하기 위해 검사를 수행합니다. 둘 이상을 사용하면 오류 메시지가 표시됩니다. if 문을 확인하는 간단한 입력을 사용해 보았지만 비참하게 실패했습니다. 항상 세 가지 인수를 모두 반복하고 여러 인수 검사를 거치지 않고도 마지막으로 전달된 인수를 가져옵니다. 조금 이상합니다. 이 작업은 쉬워야 합니다. 그랬어야 했는데...
답변1
MODE
, 및 이외의 값 으로 초기화해야 합니다 . 그런 다음 MODE가 초기값인지 확인합니다. 그렇지 않은 경우 오류 메시지를 표시하고 종료합니다. 오류가 발생한 후에는 종료해야 합니다. 그렇지 않으면 스크립트가 계속 실행됩니다. 아래 스크립트의 수정된 버전을 사용하면 시작할 수 있습니다.SMTH
SMTH2
SMTH3
MODE=0
EMSG="More than one of -d, -e, -f has been specified"
while getopts "a:b:c:def" variable; do
case $variable in
a) a=$OPTARG ;;
b) b=$OPTARG ;;
c) c=$OPTARG ;;
d) if [ $MODE = 0 ] ; then MODE=SMTH ; else echo $EMSG ; exit 1 ; fi ;;
e) if [ $MODE = 0 ] ; then MODE=SMTH2 ; else echo $EMSG ; exit 1 ; fi ;;
f) if [ $MODE = 0 ] ; then MODE=SMTH3 ; else echo $EMSG ; exit 1 ; fi ;;
esac
done