BASH初学者指南 - 输入参数

欢迎阅读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命令

nano greetme.sh

在nano中输入以下文本:

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

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

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

sh greetme.sh

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

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

第二行使用echo语句回显单词hello,然后出现奇怪的$ @符号。 ( 关于回显命令

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

greetme.sh脚本只使用第一个名字就可以了。 当他们见面时,没有人会说“你好,加里·纽维尔”,但他们可能会说“你好加里”。

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

nano greetme.sh

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

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

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

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

sh greetme.sh加里·纽维尔

当你运行这个脚本时,它会简单地说出“你好加里”(或者希望是“你好”,不管你的名字是什么。

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

顺便说一句,如果您用$ 3替换了$ 2,并且仅用2个参数运行脚本,则输出将仅为“Hello”。

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

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

#!/ bin / bash echo“你输入了$#名称”echo“hello $ @”

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

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

迄今为止,所有这些都是新颖的,但并不是非常有用。 谁需要一个简单显示“你好”的脚本?

echo语句的实际用法是为用户提供详细且有意义的输出。 如果你可以想象你想做一些复杂的事情,包括一些严重的数字处理和文件/文件夹操作,向用户展示每一步发生的事情将是有用的。

相比之下,输入参数使脚本具有交互性。 如果没有输入参数,你需要几十个脚本,所有的脚本都做了非常相似的事情,但名称略有不同。

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

打开你的greetme.sh脚本并修改它,如下所示:

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

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

现在运行脚本(用你的名字替换)。

sh greetme.sh

这次脚本显示以下内容:

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

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

第二行的$$显示您正在运行的脚本的进程ID。 为什么这很有用? 如果您在前台运行脚本,您可以通过简单地按下CTRL和C来取消它。如果您在后台运行脚本,并且它开始循环并反复执行相同的操作,或者开始导致系统损坏,您需要杀了它。

要杀死在后台运行的脚本,您需要脚本的进程ID。 脚本是否将进程ID作为其输出的一部分,这不是一件好事吗? ( 关于ps和kill命令

最后,在结束这个话题之前,我想讨论一下输出的位置。 每次脚本运行到目前为止输出都显示在屏幕上。

脚本输出写入输出文件是很常见的。 要做到这一点,运行你的脚本如下:

sh greetme.sh gary> greetme.log

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

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

概要

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