我试图用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 ...?"有人可以给我一些建议吗?上面的函数有不同的参数量,所以看看它。
谢谢!
答案 0 :(得分:1)
Stephane Chazelas写了一篇非常好的getops-long shell script,我在bash debugger中使用了this post。您可以复制该脚本并使用它。
如果您运行该程序设置变量test_getopts_long
,例如
test_getopts_long=1 bash getopts_long.sh
您将看到有关如何使用的大量示例,并对其进行自我测试。