猛击长选项/标志 - 怎么做?

时间:2015-08-07 05:30:42

标签: bash shell getopt getopts getopt-long

我试图用getopts改变我的工作脚本到getopt(长标志)。 下面我介绍我正在运行的代码。

getopts 'm:' mode
modeValue=$OPTARG

getopts 'p:' parameter
parameterValue=$OPTARG

getopts 'u:' parameter
parameterValue2=$OPTARG

getopts 'l:' parameter 
parameterValue3=$OPTARG

getopts 'n:' parameter 
parameterValue4=$OPTARG

getopts 'e:' parameter 
parameterValue5=$OPTARG

getopts 'w:' parameter 
parameterValue6=$OPTARG

getopts 'r:' parameter 
parameterValue7=$OPTARG

case $modeValue in
    addRepository)
          doAddRepository "$parameterValue" "$parameterValue7"
          exit $?
        ;;
    addProject)
          doAddProject "$parameterValue"
          exit $?
        ;;
    addUser)
          doAddUser "$parameterValue2" "$parameterValue4" "$parameterValue5" "$parameterValue6"
          exit $?
        ;;
    assignProject)
          doAssignProject "$parameterValue" "$parameterValue2" "$parameterValue3"
          exit $?
        ;;
    *)
          #echo "$doShowUsage"    
          exit 1
        ;;
esac

现在我的脚本的工作方式如下:

For add repository: ./script.sh -m addRepository -p NameOfTheProject -r NameOfTheRepository

我想编辑这样的内容:

./script.sh --mode addRepository --project NameOfTheProject --repo NameOfTheRepository

我开始修改代码并添加了以下内容:

 TEMP=`getopt -o m:p:u:l:n:e:c:r: --long mode:,project:,username:,level:,name:,email:,pass:,repo: -n 'test.sh'
    -- "$@"` eval set -- "$TEMP"

while true ; do
    case "$1" in
        -m|--mode)
            case "$2" in
                addRepository)
                        doAddRepository=$2 ; shift 2 ;;
                addProject)
                        doAddProject=$2 ; shift 2 ;;
                addUser)
                        doAddUser=$2 ; shift 2 ;;
                assignProject)
                        doAssignProject=$2 ; shift 2 ;;
                esac ;;
        -h|--help)
            case "$2" in
                *) echo "$doShowUsage"
                   exit 1
                esac ;;
        esac done

我的问题是:我是以正确的方式做到的吗?如何向函数添加参数" doAddProject / Repository / User ...?"有人可以给我一些建议吗?上面的函数有不同的参数量,所以看看它。

谢谢!

1 个答案:

答案 0 :(得分:1)

Stephane Chazelas写了一篇非常好的getops-long shell script,我在bash debugger中使用了this post。您可以复制该脚本并使用它。

如果您运行该程序设置变量test_getopts_long,例如

test_getopts_long=1 bash getopts_long.sh

您将看到有关如何使用的大量示例,并对其进行自我测试。