使用bash代码中的选项

时间:2012-10-08 21:37:01

标签: bash shell getopt getopt-long getopts

  

可能重复:
  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有效但其他所有内容都失败并显示用法。

1 个答案:

答案 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))"