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