-h
와 같은 도움말 옵션 과 기타 옵션을 추가하려는 bash 스크립트를 만들었습니다 .--help
--verbose
설명대로 만들면여기이것이 표준 솔루션이 될까요?
# Execute getopt on the arguments passed to this program, identified by the special character $@
PARSED_OPTIONS=$(getopt -n "$0" -o h123: --long "help,one,two,three:" -- "$@")
#Bad arguments, something has gone wrong with the getopt command.
if [ $? -ne 0 ];
then
exit 1
fi
# A little magic, necessary when using getopt.
eval set -- "$PARSED_OPTIONS"
# Now goes through all the options with a case and using shift to analyse 1 argument at a time.
#$1 identifies the first argument, and when we use shift we discard the first argument, so $2 becomes $1 and goes again through the case.
while true;
do
case "$1" in
-h|--help)
echo "usage $0 -h -1 -2 -3 or $0 --help --one --two --three"
shift;;
-1|--one)
echo "One"
shift;;
-2|--two)
echo "Dos"
shift;;
-3|--three)
echo "Tre"
# We need to take the option of the argument "three"
if [ -n "$2" ];
then
echo "Argument: $2"
fi
shift 2;;
--)
shift
break;;
esac
done
아니면 이를 달성하기 위한 또 다른 정의된 방법이 있습니까?
답변1
case
실제로 쉘 스크립터가 귀하와 매우 유사한 방식으로 명령문을 사용하여 자체 매개변수 구문 분석을 작성하는 것이 일반적입니다. 이제 그것이 최고의 솔루션인지 가장 표준적인 솔루션인지는 논쟁의 여지가 있습니다. 개인적으로 C에 대한 경험으로 인해 getopt
.
getopt.1
매뉴얼 페이지 에서 :
getopt는 쉘 프로세스가 옵션을 쉽게 구문 분석하고 적합한 옵션을 확인할 수 있도록 명령줄에서 옵션을 분석(분석)하는 데 사용됩니다. 이를 수행하기 위해 GNU getopt(3) 루틴을 사용합니다.
당신이 전화를 했다면 getopt
, 당신은 확실히 올바른 길을 가고 있다고 말하고 싶습니다. 원하는 경우 문을 사용하여 명령줄 인수를 반복하여 case
이러한 경우를 처리할 수 있지만 이미 알고 있듯이 getopt
실제로는 모든 무거운 작업을 수행합니다.
핵심요약: 이것은 쉘 스크립트이므로 원하는 방식으로 구현할 수 있지만 getopt
유용합니다.