옵션을 구문 분석하기위한 쉘 스크립트를 작성하고 있습니다. 그것은 옵션을 올바르게 구문 분석하지만 입력 인수를 생략하면 while 루프에서 나오지 않습니다. 누구든지 도움을 줄 수 있습니까?Getopt in shell
TEMP=`getopt -o ha:b:d:e:c: --l ca: \-n "$x" -- "[email protected]"`
eval set -- "$TEMP"
while true; do
case "$1" in
-h) print $USAGE
exit 0 ;;
-a) case "$2" in
-*|"") error "Option t, requires argument";
exit 1;;
*) print $2
T=${2^^} ;
shift 2 ;;
esac ;;
-b) case "$2" in
-*|"") error "Option p, requires argument";
exit 1 ;;
*) print $2
PE=${2^^} ;
shift 2 ;
esac ;;
-d) case "$2" in
-*|"") error "Option f, requires argument";
exit 1 ;;
*) print $2 ;
IN=$2 ;
shift 2 ;;
esac ;;
-e) case "$2" in
""|-*) error "Option e, requires argument";
exit 1 ;;
*) print $2 ;
KEY=$2 ;
shift 2 ;;
esac ;;
-c|--ca) case "$2" in
""|-*) error "Option c, requires argument";
exit 1;;
*) print $2 ;
C=${2};
shift 2 ;;
esac ;;
--) shift ;
break ;;
*) error "Invalid Input!" ;
exit 1 ;;
esac
done
USAGE:foo.sh -a arg1 -b arg2 -c arg3 -d arg 4 -e arg5
이 잘 작동하지만
foo.sh -a arg1 -b arg2 -c arg3
는 while 루프 밖으로되지 않습니다.
이것은 작동합니다. 하지만 모든 입력 인수는 arg1이 아닌 'arg1'형식을 갖습니다. 그것에 대한 어떤 해결책 ?? – user1558886
사과 : 나는'set' 앞에서'eval'을 놓쳤습니다. 내가 그것을 포함하도록 답변을 업데이 트했습니다. –
고맙습니다 ... – user1558886