我正在构建一个脚本(Linux Bash),其中需要传递一定数量的参数,可以是7个或8个参数。
如果我传递7个参数,我会这样做:
My_Script.sh
!/bin/bash
arg1=$1
arg2=$2
arg3=$3
arg4=$4
arg5=$5
arg6=$6
arg7=$7
# Do other stuff after this
我是这样运行的:./my_script.sh 1 2 3 4 5 6 7
我希望能够添加一个可选的第8个参数到这个脚本中。所以我们的想法是,有时用这第8个参数运行脚本,其余时间只用7个参数。我怎么能这样做呢?
4条答案
按热度按时间k10s72fa1#
您可以这样做:
另外,如果你这样做了
如果没有第八个Arg,则arg8将保持为空。
fcg9iug32#
另一个想法。指定前7个参数后,使用
shift 7
将其从位置参数中清除。然后,任何额外的参数都在"$@"
中,数字在$#
中qfe3c7zg3#
您可以检查
$#
的值,类似于。来测试这个脚本。
输出
输出
输出
q8l4jmvw4#
这是一大堆的争论。它们每次都是必要的吗?你能违约一些吗?
基本上,我认为这有三个主要案例。
1.您有一个固定位置必需参数的列表。如果它们都是真正需要的,并且您永远不能为它们中的任何一个假定缺省值,那么位置实际上是“好的”,因为它简化了您的编码……但是,一旦引入了可选参数,您就应该认真开始考虑
getopts
。1.如果您有恰好且只有一个可选参数,那么只需指定
arg8=$8
并不需要担心--但是一旦您有两个,那么您真的需要考虑其影响。如果您需要$9
,但实际上并不关心$8
,那么您必须传入一个伪值来填充$8
,这样才会有一个$9
。别去那里。1.在大多数情况下,除非脚本非常简单(而我的脚本几乎从来都不是),否则您应该使用
getopts
。假设您正在编写一个电信脚本,该脚本汇总了几分钟的使用量。该脚本绝对需要来自用户的3个参数--对于我们的示例,假设您需要
$state
、$mmyy
和$stream
来按州和月/年以及本地或远程标识输入文件。(您总是可以将其作为$STMMYYLT
或类似的东西传递,以将其简化为一个参数,如果这是您的口味,但通常情况下,让一件事成为一件事。)有了这些,你就可以运行它并获得总分钟数。太棒了。
但有时你需要将它们按账户分类。有时表示选项参数。
--summarize
的-s
更改积累和输出。有时,您只需要一个特定的帐户。您总是可以通过
grep
或其他函数来传递结果,但是如果您可以通过再添加一个参数来“跳过”处理99.999个大小为99.999的多GB文件,我认为这是值得的,所以让我们为--account
选项添加一个-a
选项。如果您给它一个帐户,它将忽略其他所有内容。在设计时,总是按照帮助屏幕上给你的使用说明来做事情。提前考虑这些事情真的会对你的设计有帮助。(也许这意味着
-h
代替--help
也是个好主意……)有一些关于标准格式的指导原则,如this post或this wiki。
因此,如果您向它提供了一组不可接受的参数(包括无参数),或者明确请求
--help
,它应该发出一条用法消息并退出。这将为您提供编写代码的指南。当你想出更多的时候,你可以编辑它。