0

可能重复:
在 bash shell 脚本中使用 getopts 来获取长短命令行选项

例如,我试图弄清楚如何使用像 -e/--email -h/--help 这样的标志。

更新: 当前示例:

while getopts ":ec:h" OptionArgument; do
case $OptionArgument in

        e ) S1=${OPTARG};;
        c ) S2=${OPTARG};;
        h ) usage;;
        \?) usage;;
        * ) usage;;
esac
done

但是,如果我留空,它什么也不做。如果我添加 -h 它仍然运行并且不会显示使用情况。

更新2

while [ $1 ]; do
        case $1 in
                '-h' | '--help' | '?' )
                        usage
                        exit
                        ;;
                '--conf' | '-c' )

                        ;;
                '--email' | '-e' )
                        EMAIL=$1
                        ;;
                * )
                        usage
                        exit
                        ;;
        esac
        shift
done

-h/--help 有效,但其他一切都失败并显示使用情况。

4

1 回答 1

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))"
于 2012-10-09T00:59:10.243 回答