2017-08-17 43 views
0

为了运行bash脚本我需要一些参数和标志,因为需求是相当棘手,我选择使用getopt的功能这样getopts的所有可选参数

while getopts ":s:g:r" o; do 
    case "${o}" in 
     s) 
     # Variables that require value    
     VALUE1=${OPTARG} 
     ;; 
     g) 
     # Variables that require value 
     MGROUP=${OPTARG} 
     ;; 
     r) 
     # Variables that, if present, set just a flag 
     ASROOT=1 
     ;; 
     *) 
     echo "Usage: ./myscript.sh -s value1 -g value2 -r" 
     ;; 
    esac 
done 

我想所有参数都是可选的,所以我可以稍后在代码中写出一些条件,前两个(s和g)带有参数,第三个(r)只是一个可选标志。在未来,我可能需要添加额外的参数,始终可选。 有什么建议吗?

+0

首先我建议你编辑的标题,因为你问的是关于getopts的(bash的内置),而不是getopt说明(GNU替代)。所以,作为可选参数,你说有时候你会使用带有参数的选项,有时候你需要使用它而没有参数?像-s“可选参数”? –

+0

投票结束,不清楚。你的实际要求是什么? –

+0

好吧,首先问题是关于getops,对我来说编辑标题是很好的。其次我的问题特别关注这一行:while getopts“:s:g:r”o;做 - 问题是:如何让所有选项不是强制性的。一个需要参数的选项必须有它,任何只是一个标志的选项都必须保持这种方式。道歉不明确,希望这有助于澄清更多。谢谢大家 –

回答

1

可选参数是可选的,用于强制检查VALUE1MGROUP。例如:

[[ -n $VALUE1 && -n $MGROUP ]] || { 
    echo "mandatory paramter missing" 
    exit 1 
} 

getopts