在“=”上拆分bash脚本参数

时间:2011-11-03 22:55:29

标签: bash parameters sed

我有一个bash脚本,您可以使用“--option parameter”指定选项:

if [ ${1:0:2} != '--' ] ; then 
    echo -e "Unrecognized option: $1\n$requestHelpMessage"; exit 1;
fi
if [ ! $2 ];
    then echo -e "Expected parameter for $1\n$requestHelpMessage"; exit 1;
fi
case ${1:2} in
    branch) # do something with $2 here
    batch) # do something with $2 here
    version) # do something with $2 here
    *) # you get the idea
esac

我想扩展它以便能够处理“--option = parameter”。是否有一种简单的方法可以将“=”分开而不用特殊的套管?

2 个答案:

答案 0 :(得分:3)

请尝试使用“getopt”,而不是使用getopt或进行自己的设置。它支持long(word)和short(字符)参数。

以下是使用中的示例:

get_inputs () {
    set -- $( getopt -u -l class:,desc:,force,host:,help,verbose "c:d:fh:v?" "$@" )

    while [ $# -gt 0 ]; do 
        case "$1" in
            -c|--class)
                CLASS=$2
                shift
                ;;
            -d|--desc)  
                DESCR=$2
                shift
                ;;
            -f|--force)
                FORCE=1
                ;;
            -h|--host)
                HOST=$2
                shift
                ;;
            -v|--verbose)
                VERBOSE=1
                ;;
            --help)
                usage
                exit
                ;;
            *)
                break
                ;;
        esac
        shift
    done
}

答案 1 :(得分:0)

稍作修改即可实现您的目标:

if [[ ! $1 =~ "^--?" ]] ; then 
    echo -e "Unrecognized option: $1\n$requestHelpMessage"; exit 1;

...

case $1 in
    -*branch) # do something with $2 here
    -*batch) # do something with $2 here
    -*version) # do something with $2 here
    *) # you get the idea
esac

测试允许-

开头的一个或多个$1