问题标签 [getopts]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
383 浏览

linux - Bash:使用 getopts 传递参数

我知道这是一个简单的问题,我一直在研究 getopts 教程和示例,但我被卡住了。如果您检查链接,您将看到在@fedorqui 的帮助下,我已经设法编写代码以获取文件中数组的元素。

但是,我需要对输入进行参数化,以便即使我更改输入顺序,脚本也能继续工作。

这是我写的第一个代码:

现在,脚本像这样工作$ ./tablooku.sh 3 2 tablom.dat,输出是:

我需要做的是翻译这段代码,这样当我输入时$ ./tablooku.sh -r 3 -c 2 tablom.dat,我就能得到脚本的工作。

这是我写的在运行时卡住的代码:

你能告诉我这里有什么问题吗?当我运行命令时,系统输出是:

提示卡住了,我不得不用它ctrl+z来打破等待。看起来我无法将文件位置分配给fi但我无法解决问题

注意:请记住 -r 是行,-c 是列,最后一个参数是不使用任何选项代码的文件位置(例如 -f)

更新 1:

]我用]]和改变[了if 括号[[。现在unary operator expected错误消失了。现在,提示等待并且不打印-f was triggered, Parameter:...我仍然使用ctrl+z来打破等待。

更新 2:

在@grebneke 和@TimK 的建议下,我添加了分号并将fi参数更改为fil. 这样,我就可以使脚本正常工作。但是,还有一个小问题。如果我输入,该代码将起作用$ ./tablooku.sh -r 3 -c 2 -f tablom.dat。但是,我需要它运行而无需编写-f. 可能吗?

0 投票
2 回答
106 浏览

bash - 在耦合的 shell 脚本之间干净地传递选项

我有一个 (bash) shell script myBaseScript.sh,具有以下签名:

该脚本myBaseScript.sh通过 解析选项getopts,如下所示:

现在我希望创建一个脚本mySuperScript.sh,它调用myBaseScript.sh,允许将选项转发到基本脚本:

[OPTIONS]使用的选项在哪里myBaseScript.sh;它们用于mySuperScript.sh.

该脚本mySuperScript.sh将爬取所有目录DIR1[DIR2]等等,编译一个有效文件列表,${FILES[@]}然后传递给myBaseScript.sh.

现在我有这个mySuperScript.sh

where${FILES[@]}当前路径中的文件列表。换句话说,这允许

但不适用于任何可选DIR1的 ,[DIR2]等。

我可以使用

然后传递as to的第一个$OPTIND条目。但这似乎过于复杂,而且需要将有效选项列表复制到,这是管理上的噩梦。$allOpts[OPTIONS]myBaseScript.shmyBaseScript.sh

我还可以创建一个新脚本,专门用于解析这些选项。但这似乎也有点尴尬,因为它产生了一种myBaseScript.sh以前不存在的依赖关系......

那么,最干净的方法是什么?

0 投票
1 回答
3556 浏览

bash - 使用长选项正确使用 bash getopts

我在下面编写了使用长选项的代码getopts,但它不起作用(参数对变量的值没有影响)。什么是正确的语法?

0 投票
3 回答
4258 浏览

shell - 如何在你的 shell 中使用互斥标志并添加一个可选参数标志(使用 getopts)

我正在使用标准的 getopts 逻辑。但我想知道如何使我提供的选项相互排斥。例如

我正在尝试使用以下内容开发此逻辑

如何强制执行互斥标志。我确信有更多的杂技演员方法可以做到这一点。我想我在这里遗漏了一些常识 - 并试图弄清楚这一点。谢谢

我正在使用 ksh

我第一次运行它。

所有上述情况 C0:C7 应拒绝。注意 C0 和 C7 是一样的。然而,尽管这个 C0 给出了预期的错误,而 C7 不会给出任何错误?奇怪的

只有工作的人应该是

@hvd :TYSM 为您的回复。我想添加一个附加标志 -p 它将提供“路径覆盖”选项。所以也许我们必须扩展 getopt 以获取这样的参数

以上是旧方法。现在我有 2 个输入参数。一个是 SID,另一个是路径。是像上面那样简单还是我需要添加更多检查以防止其他不需要的组合。我想我试图解决的问题是,需要做出更多的规定来允许这个 -p 参数,它是一个可选的覆盖参数。-p 可以与上面的任何参数共存,但我想一个要求是它应该紧跟在 -p 标志之后,所以这不应该允许 - 因为它不明确。

再次感谢

0 投票
2 回答
4681 浏览

bash - BASH:具有默认参数值的 getopts

我还有另一个我根本无法解决的 bash 脚本问题。这是我的简化脚本显示了问题:

我通过以下方式调用它:

它可以工作,但是当我不提供参数时它不起作用:

我希望 /dev 成为此脚本中的默认参数 $2 。

0 投票
1 回答
9693 浏览

bash - getopts 检查互斥参数

我有一个简单的脚本(如下),它具有互斥的参数。

脚本的参数应该是./scriptname.sh -m|-d [-n],但是,用户可以运行./scriptname.sh -m -d错误的脚本。

问题:如何强制用户只提供了一个互斥参数?

0 投票
2 回答
4562 浏览

bash - 带有非选项和选项参数的脚本

我正在尝试处理我的 bash 脚本的可选参数和强制参数。我有以下脚本:

当我使用以下命令运行我的脚本时,一切看起来都很好:

但是当我混合这个参数时:

它不...如何使其适用于所有参数组合?

0 投票
2 回答
682 浏览

bash - 如何使用 bash 中的选项来跳过部分代码

我有 bash 脚本,我希望能够根据调用脚本时传递的选项跳过(即不执行)它的一些命令。

为了说明我想要完成的任务,我编写了脚本,其中的if语句基本上完成了相同的事情。

如果在调用脚本时没有传递任何参数,echo则执行所有四个语句。如果我想跳过其中一个 echo 语句,我将skipLETTER其用作第一个参数:

并且除此之外的所有字母都A被打印出来。它可以工作,但它确实有很多限制 - 一方面,我不能使用相同的参数 ( $1) 跳过许多部分。我想用选项实现同样的目标,所以我可以输入如下内容:

结果只打印BC字母。

我知道我可以使用getoptgetopts实现这一点,但我找不到任何简单的使用示例来实现我所描述的。

0 投票
1 回答
97 浏览

linux - RHEL6 getopts 似乎没有工作

我有一台新的 RHEL6 机器,我正在尝试运行一个脚本来生成一些输出。该脚本使用我过去从未使用过的 getopts。这应该可以在其他机器上使用,但这是我第一次尝试。下面是脚本的开头。语法有什么问题吗?当我尝试输出变量时,它什么也不显示:

回显显示一个空行。

0 投票
3 回答
10230 浏览

bash - 使用 --getopts 获取整个单词标志

可以使用 getopts 来获取全字标志吗?

如下所示:

试图拿起那些双划线标志。