如何将参数传递给Bash脚本

使用以下两种方法中的一种在运行时将参数传递给脚本

编写一个Bash脚本,以便它接收从命令行调用脚本时指定的参数。当脚本必须根据输入参数(也被调用)的值执行稍有不同的函数时,使用此方法争论

计算机监视器与bash脚本说明
乐动体育赞助《Lifewire》/郑然

在Bash脚本中传递参数的示例

如果您开发了一个名为的脚本stats.sh要计算文件中的单词数,最好将文件名作为参数传递,以便相同的脚本可以用于将要处理的所有文件。例如,如果要处理的文件的名称为songlist,在命令行中输入以下命令:

sh stats.sh songlist.

使用变量在脚本内访问参数$1$2$3,等等。的变量$1指第一个参数,$2到第二个论点,和$3第三个论点。例如,在脚本中:

file1 = $ 1
wc FILE1美元

将一个具有描述性名称的变量赋给第一个参数的值($1),然后调用单词计数实用程序(WC)在变量上$ file1.或者其他你想做的事。

如果需要可变数量的参数,请使用$ @变量,它是所有输入参数的数组。此过程使用对于循环要迭代地处理每个,如以下示例中所示:

for FILE1 in "$@"

wc FILE1美元
完毕

以下是如何使用命令行的参数调用此脚本的示例:

Sh stats.sh songlist1 songlist2 songlist3

如果参数包含空格,用单引号将其括起来。例如:

Sh stats.sh ` songlist 1 ` ` songlist 2 ` ` songlist 3 ` `

标记方法

通常写入脚本,以便可以使用标志以任何顺序传递参数。使用标志方法,可以选择一些参数。

例如,编写一个脚本,根据指定的参数从数据库检索信息,例如用户名日期, 和产品,生成指定格式的报表。脚本需要以这样一种方式编写,以便在调用脚本时传递这些参数。它可能是这样的:

Makereport -u jsmith -p笔记本-d 10-20-2011 -f PDF

属性启用此功能敬佩功能。对于上面的例子,使用敬佩如下:

而getopts u:d:p:f:选项

案例“$ {option}”

u)用户= $ {OPTARG};;
d)日期= $ {OPTARG};;
p)产品= $ {OPTARG};;
f)格式= $ {OPTARG};;
eSAC.
完毕

这是一个使用敬佩函数和所谓的Optstring.在这种情况下U:D:P:F:-遍历参数。的尽管循环遍历optstring(其中包含用于传递参数的标志),并将为该标志提供的参数值赋给变量选项.的情况下语句然后分配变量的值选项读取所有参数后使用的全局变量。

冒号的意义

optstring中的冒号表示需要对应标志的值。在上面的例子中U:D:P:F:,所有标志都是冒号。这意味着所有标志都需要一个值。例如,如果dfFlags不需要有值,u:dp:f是optstring。

起始的冒号将主动放入“静音报告模式”中。而不是完全错误的脚本,任何意外的参数都会填补?选项,您可以根据需要查找或处理。在Optstring中没有初始结肠,终端显示错误。例如,我从上面有脚本计算单词。它期望类似于“stats.sh -f filename”的语法。如果我尝试“stats.sh -h”,我得到了:

stats.sh - h
Stats.sh:非法选项——h

虽然,随着冒号,我可以在我的脚本中放一条线,期待这样的东西,如 - ?)回声“no - $ {optarg}参数找到。”;;.然后,这允许我捕获并处理意外条目(通过输出我自己的错误消息)。

stats.sh - h
没有找到-h参数。

前没有标志的参数将被忽略敬佩.如果在调用脚本时未提供OptString中指定的标志,则除非您在代码中特别处理此案例,否则不会发生任何内容。任何未处理的参数getops还可以用常规捕获吗$1$2, 和$3变量。

此页面有用吗?