Bash长选项/标志 - 如何操作?

3

我正在尝试使用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个回答

1

Stephane Chazelas写了一段非常好的getops-long shell script,我在我的bash debugger中使用它。你可以复制那个脚本并使用它。

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

test_getopts_long=1 bash getopts_long.sh

你将会看到大量的使用示例,它会自我测试。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接