getopt를 사용하고 빈 인수를 통해 필수 플래그를 전달하면 다음 플래그를 인수로 읽습니다. 대시(-)와 이중(--)이 포함된 플래그를 구별하기 위해 일종의 검사를 추가하는 데 도움이 필요합니다. 그렇지 않으면 오류로 식별한 다음 Usage 함수를 호출합니다.
./test.sh -s -h
산출:
-s '-h' --
DBSTORE=-h
DBHOST=
제가 작업 중인 코드는 다음과 같습니다.
#!/bin/bash
################################################
# Usage function display how to run the script #
################################################
function usage(){
cat << EOF
Usage: ./test.sh [-s] <abc|def|ghi> [-h] <Hostname>
This script does foo.
OPTIONS:
-H | --help Display help options
-s | --store STORE OpenDJ Store type [abc|def|ghi]
-h | --Host HOST Hostname of the servers
EOF
}
##########################################
# Parse short/long options with 'getopt' #
##########################################
function getOpts(){
# Option strings:
SHORT=s:h:H
LONG=store:,host:,help
# Read the options
OPTS=$(getopt --options $SHORT --long $LONG --name "$0" -- "$@")
if [ $? != 0 ]; then
echo "Failed to parse options...!" >&2
usage
echo ""
exit 1
fi
echo "$OPTS"
eval set -- "$OPTS"
# Set initial values:
DBSTORE=
DBHOST=
HELP=false
# Extract options and their arguments into variables:
NOARG="true"
while true; do
case "$1" in
-s | --store )
DBSTORE=$2;
shift 2
;;
-h | --host )
DBHOST="$2"
shift 2
;;
-H | --help )
usage
echo ""
shift
shift
exit 1
;;
-- )
shift
break
;;
\?)
echo -e "Invalid option: -$OPTARG\n" >&2
usage;
echo ""
exit 1
;;
:)
echo -e "Missing argument for -$OPTARG\n" >&2
usage;
echo ""
exit 1
;;
*)
echo -e "Unimplemented option: -$OPTARG\n" >&2
usage;
echo ""
exit 1
;;
esac
NOARG="false"
done
[[ "$NOARG" == "true" ]] && { echo "No argument was passed...!"; usage; echo ""; exit 1; }
}
getOpts "${@}"
echo DBSTORE=$DBSTORE
echo DBHOST=$DBHOST
exit 0