可能重复:
Using getopts in bash shell script to get long and short command line options
我正在试图弄清楚如何使用-e / - email -h / - 这样的标志。
更新 目前的例子:
while getopts ":ec:h" OptionArgument; do
case $OptionArgument in
e ) S1=${OPTARG};;
c ) S2=${OPTARG};;
h ) usage;;
\?) usage;;
* ) usage;;
esac
done
然而,如果我留空,它什么都不做。如果我添加-h它仍会运行,并且不会显示用法。
UPDATE2
while [ $1 ]; do
case $1 in
'-h' | '--help' | '?' )
usage
exit
;;
'--conf' | '-c' )
;;
'--email' | '-e' )
EMAIL=$1
;;
* )
usage
exit
;;
esac
shift
done
-h / - help有效但其他所有内容都失败并显示用法。
答案 0 :(得分:1)
如果你想要长期的GNU选项和短选项,请参阅此脚本以在脚本http://stchaz.free.fr/getopts_long.sh中获取源代码并提供示例:
示例:
#!/bin/bash
# ( long_option ) 0 or no_argument,
# 1 or required_argument, 2 or optional_argument).
Help() {
cat<<HELP
Usage :
$0 [ --install-modules <liste des modules> ] [-h|--help]
HELP
exit 0
}
. /PATH/TO/getopts_long.sh
OPTLIND=1
while getopts_long :h opt \
install-modules 1 \
help 0 "" "$@"
do
case "$opt" in
install-modules)
echo $OPTLARG
;;
h|help)
Help; exit 0
;;
:)
printf >&2 '%s: %s\n' "${0##*/}" "$OPTLERR"
Help
exit 1
;;
esac
done
shift "$(($OPTLIND - 1))"