【发布时间】:2016-02-07 16:09:15
【问题描述】:
我仍在使用这些功能“烘烤”我的外壳,所以我的问题听起来可能不像“完全准备好”......它更多的是“设计这个的最佳方法是什么”而不是“我遇到了这个错误”否则这将不起作用..现在我该怎么办”,所以请耐心等待。当我解释时
我正在考虑一个可以在 2 种模式下运行的 shell 程序
- 标准模式是一堆位置参数
例如myprogram date1 date2 date3 date4 # can go on indefinitely
- 命名参数模式
myprogram -r date1 # Just 1 date para allowed
它们当然是互斥的 myprogram date1 date2 date3 date4 可以 myprogram -r date1 date2 date3 date4 不是因为 -r 只需要 1 个参数
我知道getopts 提供了一个命名参数功能,可以通过一系列选项shift。
我已准备好标准模式并可以正常工作,并希望将“添加”到代码中以获取命名参数模式
在标准模式下,我的代码模式类似于
for args
do
stuff that I want done here
shift
done
这就是我对命名参数模式逻辑的想法
(当我使用 getopts 和更多使用 1 个位置参数时,它应该退出。)
getopts 只允许 1 个参数,我正在考虑这样的一些
while getopts "r:" opt;
do
case statement of getopts
<stuff I want to do >
esac
done
并且为了将位置 paras 限制为 1,我应该有这样的东西? [ "$#" -eq 2 ] || die " more than 1 para not expected here"
2 是因为当我在上面的 while 循环中时,-r 是第一个位置。 para 和 1 para 是变量之一。我必须在循环内进行检查,因为如果不使用-r 选项,我希望它在不做任何事情的情况下通过,在这种情况下,我可以拥有所需数量的 pos 参数
所以我怎么做这个最好——这就是我想要理解的。
将getopts 代码放在第一位,然后使用位置参数代码?
对不起,如果我的问题过于具体。
【问题讨论】:
-
myprogram date1和myprogram -r date1有区别吗?如果没有,请不要在界面中添加不必要的选项。 -
是的,
myprogram date1只获取第一级日期,myprogram -r date将递归获取数据,这就是为什么递归选项只需要 1 个日期参数而不是一堆 em。感谢收看!
标签: linux bash shell unix getopts