Skip to main content

BASH初学者指南 - 输入参数

Supersection 1, More Comfortable (六月 2025)

Supersection 1, More Comfortable (六月 2025)
Anonim

欢迎阅读BASH系列入门指南的第二部分,这是独一无二的,它是初学者为初学者编写的唯一BASH教程。

本指南的读者将在我积累知识的同时积累知识,并希望在最后我们能够编写一些相当聪明的脚本。

上周我介绍了创建第一个脚本,它只显示了“Hello World”字样。它涵盖了诸如文本编辑器,如何打开终端窗口,在何处放置脚本,如何显示单词“Hello World”以及诸如引号(“”)之类的转义字符上的一些更精细点等主题。

本周我将介绍输入参数。还有其他指南教这种东西,但我发现他们跳进了一些相当低级别的东西,可能提供了太多的信息。

什么是参数?

在上一个教程的“Hello World”脚本中,它非常静态。脚本根本没有做太多的事情。

我们怎样才能改进“Hello World”脚本?

一个问候运行它的人的脚本怎么样?它不会说“Hello World”,而是会说“Hello Gary”,“Hello Tim”或“Hello Dolly”。

如果没有接受输入参数的能力,我们需要编写三个脚本“hellogary.sh”,“hellotim.sh”和“hellodolly.sh”。

通过允许我们的脚本读取输入参数,我们可以使用一个脚本来问候任何人。

要执行此操作,请打开终端窗口(CTRL + ALT + T)并通过键入以下内容导航到您的脚本文件夹:(关于cd命令)

cd脚本

通过键入以下内容创建一个名为greetme.sh的新脚本:(关于touch命令)

触摸greetme.sh

通过键入以下内容在您喜欢的编辑器中打开脚本:(关于nano命令)

纳米greetme.sh

在nano中输入以下文本:

#!/ bin / bash echo“hello $ @”

按CTRL和O保存文件,然后按CTRL和X关闭文件。

要运行该脚本,请在命令行中输入以下内容,替换为您的名称。

sh greetme.sh

如果我用我的名字运行脚本,它会显示“Hello Gary”字样。

第一行有#!/ bin / bash行,用于将文件标识为bash脚本。

第二行使用echo语句来回显单词hello,然后是奇怪的$ @表示法。 (关于echo命令)

$ @展开以显示与脚本名称一起输入的每个参数。因此,如果您键入“sh greetme.sh tim”,将显示“hello tim”字样。如果您键入“greetme.sh tim smith”,则会显示“hello tim smith”字样。

greetme.sh脚本只需要使用名字来打招呼,这可能会很不错。当他们遇见我时,没有人会说“你好gary newell”,但他们可能会说“你好加里”。

让我们改变脚本,使它只使用第一个参数。通过键入以下内容打开nano中的greetme.sh脚本:

纳米greetme.sh

更改脚本,使其如下所示:

#!/ bin / bash echo“hello $ 1”

按CTRL和O保存脚本,然后按CTRL和X退出。

运行如下所示的脚本(用你的名字替换我的名字):

sh greetme.sh gary newell

当你运行脚本时,它只会说“hello gary”(或希望“你好”,不管你的名字是什么。

$符号后面的1基本上对echo命令说,使用第一个参数。如果你用$ 2替换1美元,那么它会显示“hello newell”(或者你的姓氏)。

顺便提一下,如果用$ 3替换$ 2并用仅2个参数运行脚本,则输出将只是“Hello”。

可以显示和处理实际输入的参数数量,在后面的教程中,我将展示如何使用参数计数进行验证。

要显示输入的参数数量,请打开greetme.sh脚本(nano greetme.sh)并修改文本,如下所示:

#!/ bin / bash echo“你输入$#names”echo“hello $ @”

按CTRL和O保存脚本,按CTRL和X退出nano。

第二行的$#显示输入的参数数量。

到目前为止,所有这些都是新颖的,但不是很有用。谁需要一个只显示“你好”的脚本?

echo语句的实际用途是为用户提供详细且有意义的输出。如果你可以想象你想要做一些复杂的事情,包括一些严肃的数字运算和文件/文件夹操作,那么向用户显示每一步的发生方式是很有用的。

相比之下,输入参数使您的脚本具有交互性。如果没有输入参数,您将需要许多脚本,所有脚本都执行非常相似的操作,但名称略有不同。

考虑到所有这些,还有一些其他有用的输入参数,我们最好知道它,并将它们全部包含在一个代码片段中。

打开你的greetme.sh脚本并修改如下:

#!/ bin / bash echo“文件名:$ 0”echo“进程ID:$$”echo“---------------------------- ---“echo”你输入$#names“echo”hello $ @“

按CTRL和O保存文件,按CTRL和X退出。

现在运行脚本(替换为您的名字)。

sh greetme.sh

这次脚本显示以下内容:

文件名:greetme.sh进程ID:18595 ------------------------------你输入了两个名字你好gary newell

脚本第一行的$ 0显示您正在运行的脚本的名称。请注意,它是美元零而不是美元o。

第二行上的$$显示您正在运行的脚本的进程ID。为什么这有用?如果你在前台运行一个脚本,你可以通过按CTRL和C来取消它。如果你在后台运行脚本并且它开始循环并反复做同样的事情或开始导致系统损坏你需要杀了它。

要终止在后台运行的脚本,您需要脚本的进程ID。如果脚本将进程id作为其输出的一部分,那不是很好。 (关于ps和kill命令)

最后,在我完成这个主题之前,我想讨论输出的位置。每次脚本运行到目前为止,输出都已显示在屏幕上。

将脚本输出写入输出文件是很常见的。为此,请按如下方式运行脚本:

sh greetme.sh gary> greetme.log

上面命令中的>符号将文本“hello gary”输出到名为greetme.log的文件中。

每次使用>符号运行脚本时,它都会覆盖输出文件的内容。如果您希望附加到文件,请将>>替换为>>。

摘要

您现在应该能够将文本写入屏幕并接受输入参数。