BashShell脚本新手指南(一)BashShell脚本新手指南(二)欢迎阅读BashShell脚本新手第三部分。这篇最后的文章将回归一些知识点,为你持续的个人发展做好准备。它将涉及函数,与if/elif语句进行比较,并以探索while循环结束。函数让我们从一个看似困难但实际上非常简单的基本概念开始:函数。将其视为将反复使用的脚本部分放入可重用组的简单方法。您在本系列的第一篇或第二篇文章中所做的任何事情都可以放入函数中。因此,让我们将一个函数放入我们的learnToScript.sh文件中。让我指出几个要点。您需要为您的函数指定一个名称、一对括号,并在您放入函数中的命令两边加上大括号。#!/bin/bash#一个返回回显语句的函数。helloFunc(){echo"来自一个函数的你好。"}#invoke第一个函数helloFunc()helloFunc您将看到以下输出:[zexcon@fedora~]$./learnToScript.sh来自函数的Hello。[zexcon@fedora~]$函数是重用一组命令的好方法,但是如果你能让它们在每次使用时都对不同的数据进行操作,它们会更有用。这要求您在每次调用函数时提供数据,称为参数。要提供参数,您只需在调用函数时将它们附加到函数名称即可。为了使用您提供的数据,您在函数命令中使用位置来引用它们。它们将被命名为$1、$2、$3等,具体取决于您的函数将采用多少个参数。让我们修改前面的示例以帮助更好地理解问题。#!/bin/bash#一个返回回显语句的函数。helloFunc(){echo"来自一个函数的你好。"echo$1echo$2echo"Yougaveme$#arguments"}#invokethefunctionhelloFunc()helloFunc"天气怎么样?"精细输出如下:Hellofromafunction。天气怎么样?很好,你给了我2个参数输出中发生的事情是helloFunc()在每一行上都做了回显。首先它从函数中回显一个Hello,然后它继续回显变量$1的值,结果是“Howistheweather?”你传递给helloFunc。然后它将继续处理变量$2并回显它的值,这是您传递的第二项:Fine。该函数将以回显Yougaveme$#arguments结束。请注意,第一个参数是单个字符串“Howistheweather?”用双引号括起来。第二个参数Fine没有空格,所以不需要引号。除了使用$1、$2等,您还可以使用变量$#来确定传递给函数的参数数量。这意味着您可以创建一个接受可变数量参数的函数。关于bash函数的更多详细信息,网络上有很多很好的资源。这是帮助您入门的资源。我希望您了解了函数如何在您的bash脚本中提供巨大的灵活性。数值比较[]如果要进行数值比较,需要在方括号[]内使用以下运算符之一:-eq(等于)-ge(等于或大于)-gt(大于)-le(小于或等于)-lt(小于)-ne(不等于)所以,例如,如果你想看看12是否等于或小于25,你可以做类似[12-le25].当然,12和25可以是变量。例如,[$twelve-le$twentyfive]。(LCTT译注:注意保留方括号和判断语句之间的空格)if和elif语句下面介绍带数值比较的if语句。Bash中的if语句以if开头,以fi结尾。if语句以if开头,后跟您要执行的检查。本例中检查的是变量numberOne是否等于1,如果numberOne等于1,则执行then语句,否则执行else语句。#!/bin/bashnumberTwelve=12if[$numberTwelve-eq12]thenecho"numberTwelveisequalto12"elif[$numberTwelve-gt12]thenecho"numberTwelvevariableisgreaterthan12"elseecho"两者都不是statementsmatched"fi输出如下:[zexcon@fedora~]$./learnToScript.shnumberTwelvevariableisequalto12你看到的是if语句的第一行,它正在检查变量的值是否真的等于12。如果是,语句停止,回显numberTwelve等于12,并在fi之后继续执行脚本。如果变量大于12,则执行elif语句,并在fi之后继续执行。当您使用if或if/elif语句时,它是自上而下工作的。当第一个语句匹配时,它停止并执行命令,并在fi之后继续。字符串比较[[]]这是数字比较。字符串比较呢?使用方括号[[]]和后面的运算符等于或不等于。(LCTT译注:注意保持方括号和判断语句之间的空格)=(等于)!=(不等于)请记住还有一些其他的字符串比较方法,我们不会在这里讨论,但你可以更深入地了解它们以及它们是如何工作的。#!/bin/bash#带有字符串的变量匹配。”elseecho"字符串不完全匹配。"fi#This将利用then语句,因为它不寻找区分大小写的匹配项if[[$stringItem="hello"]]thenecho"Thestringdoesmatchbutisnotcasesensitive."elseecho"由于大写的H,字符串不匹配。"fi您将得到以下三行:[zexcon@fedora~]$./learnToScript.sh该字符串是完全匹配的。由于大写的H,字符串不匹配。[zexcon@fedora~]$while循环在结束本系列之前,让我们看一下循环。while循环的一个例子是:“当1小于10时,将值加1”,你一直这样做,直到语句不再为真。下面你会看到变量number被设置为1。在下一行,我们有一个while语句来检查number是否小于或等于10。包含在do和done之间的命令被执行,因为while的比较结果是真的。所以我们回显一些文本并将number的值加1。我们继续,直到while语句不再为真,它跳出循环并回显我们已经完成了while循环,因为$number大于10..#!/bin/bashnumber=1while[$number-le10]doecho"Wecheckedthecurrentnumberis$numbersowewillincrementonce"((number=number+1))doneecho"我们已经完成了while循环since$numberisgreaterthan10."while循环的结果如下:[zexcon@fedora~]$./learnToScript.shWecheckedthecurrentnumberis1sowewillincrementonceWecheckedthecurrentnumberis2sowewillincrementonceonce我们检查当前数字是3所以我们将增加一次我们检查当前数字是4所以我们将增加一次我们检查当前数字是5所以我们将增加一次我们检查当前数字是6所以我们将增加一次我们检查当前数字是7所以我们将递增一次我们检查当前数字是8所以我们将递增一次我们检查当前数字是9所以我们将递增一次我们检查当前数字是10所以我们将递增一次我们完成了这while循环,因为11大于10。[zexcon@fedora~]$如您所见,实现这一点所需的脚本量比if语句继续检查每个数字要少得多这是循环的伟大之处,而while循环只是众多方法中的一种,它可以以不同的方式使用以满足您的个性化需求。总结一下下一步是什么?正如文章所指出的,这是针对Bashshell脚本编写的初学者的。希望我激发了您对脚本编写的兴趣或终生热爱。我建议你看看别人的脚本,看看你不知道或不明白的地方。请记住,由于本系列中的每篇文章都涵盖了进行数学运算、比较字符串、输出和汇总数据的多种方法,因此它们也可以使用函数、循环或许多其他方法来完成。如果您练习所讨论的基础知识,那么将它们与您仍需学习的其他内容结合起来会很有趣。
