00:00
好,那我们继续来学习share啊,在刚才呢,我们也给大家介绍了各种循环写法啊,那曾经我们编了一个脚本,就是制作那个菜单,那事实上这个制作菜单有一个非常适合的指令可以帮我们来实现啊,这个指令呢就叫select。这个select呢,它本身自带循环,而且它能自动的把菜单给你生成。生成的菜单自动的在前面可以给你添加1234的编号。这就省得我们再通过前面讲的那个cat来手工生成这个菜单了。那么select命令的语法是这样的,Select name,那这是变量的名称。后面跟in words do commands,诶大家看好像这个语法。
01:06
跟前面有什么语句是基本一样的,和for循环就无非就是把这个select原来是for换了一下,其他都一样。啊,不过呢,For循环它是一个根据这里面的单词序列来循环多少多少次,那select呢,它不是说根据这里面的循环,它是根据这里面的菜单里面的元素个数来决定生成菜单有几个是这个意思。所以我们来看一下啊,这个是一个变量名,那么将来我们用户在菜单它可以自动生成,然后用户生成的这个菜单的标题就是1234这个编号,它会自动的根据这个序号1234赋予这个里面的单词,就是每个单词前面会自动加个编号,比方说应后面跟ABC,那么A的前面加个一,B的前面加个二,C在前面加个三,它自动给你生成三个菜单。
02:11
而且呢,它还可以让等待用户输入,让你选择,它会自动的提示你,请你选择1234,那这个选择你输入1234,这个输入的内容将保存在有一个叫默认的reply变量里,它会自动存到这里面来,哎,但是存进去是存进去了,那么你选123,顶多他就把你输入的内容存在这个reply里面。啊,这个select的命令呢,相当于一个死循环,它不断的去提示你输东西,所以呢,你需要通过一些方法让它结束,那怎么结束呢?你可以加上我们前面讲的break或者exit等等指令,把它在满足一定的条件下退出。啊,所以我们将来可以做判断,比方说用户输入的是某一个数字啊,如果这个数字达到了某一个条件啊,我们就可以执行一个退出啊,所以我们select经常会case合case一块来用,因为case呢是可以判断某个变量的值是多少的啊,所以我们现在可以看一下,大体上先了解一下这个select的用法,比方说select menu,这是个变量名,变量名由你写,然后in后面跟上。
03:31
菜单具体的列表啊,比方说第一个呢叫备份啊,第二个叫清理日志。心理日志啊,第三个比方说是这个,呃,做做什么呢,做退出。然后我就写三个,然后度,然后这里面你就可以执行一些命令啊,比方说我们就执行a reply,我把这个变量reply打印一下。
04:21
啊,你看它是不是自动生成了三个这123自动就生成了,然后你输一。输二输三,那这个怎么来的?因为你输入的内容会自动赋予reply,所以reply里面存的就是你这123输入内容。啊,你看这个菜单自动自动生成了,那所以我们利用这个select的菜单功能,将来我就可以判断了,说你这个reply输入的是一还是二还是三。我就判断这个reply,然后决定接着我们要做什么,不就完了吗?但是他这个提示有点不好看,这提示让我输入什么呀,是吧,所以这个东西怎么去修改这个提示信息呢?哎,我们可以通过PS3 PS3这是一个提示语句,就提示我们让我们输什么。
05:20
那比方说我们请选择。啊,对应的这个工作对应的菜单项啊,对应的菜单。啊,这有点像,好,我们把这个输完,输完以后你再来看,看到没,是不是就变了。啊,那么你看你数一数二数三就可以了啊,但是光这样是意义不大的。那我们是不是接下来要判断它数字是一的时候我们要干什么,数字是二的时候我们干什么,是不是,那我们就配合case就可以了啊,所以我这呢,写好了一段代码啊,大家看这段代码。
06:06
那这段代码呢,跟我们之前讲的那个差不多,也是个点菜的。好,那在这看。刚开始我有一个some的总和来存他的点下的菜的总价格,然后这个是点菜一到六,然后菜单的内容就是这几个菜单,其中有一个是点菜结束,然后对这个reply进行判断,如果是一价格多少钱,二多少钱,三多少钱,四多少钱,然后接着如果是六,因为六的话对应的就是点菜菜点菜结束这个,所以我们就要退出,看到没有,有个break,是不是整个循环就结束了啊,因为select的命令本身就是个循环,所以break就结束了啊,当然如果他输的不是123456,是其他数字点开错误,重新选啊,重新选,哎,最后呢,打印出总价格来。
07:14
你看那现在你可以选了,比方说我们点个北京烤鸭。啊,再点个喧虾。然后再点一个火锅儿。行了。没吃过羊蝎子吗?羊蝎子,羊蝎子北京那边到处都是。你看蝎的是那个羊身上的一个骨头吧,啊,里面有骨髓很好吃,反正北方这个菜比较多啊,那么现在点菜结束六结束,看这就是总价格算出来,你看这就用select来实现了啊,所以将你将来就可以把这些换成你上班要干的活,对吧?哎,你看咱们现在有同学,他实际上就是类似的实现了这个功能,他编了一个这样的脚本。
08:27
这个是应该是咱们39期的同学写的一个初始化脚本啊,之前应该应该知道这个脚本,应该是这个脚本,它的功能是什么,那我们来看一眼啊。好,你执行一下,你看这就是他这个脚本实现的功能,让你选吧,123你选。
09:02
第一项。第二项、第三项。改IC Linux改网卡,这都可以,就是他把咱们上课讲过的东西全都用脚本这个菜单方式来实现啊,啊比方说我要显示当前的主机信息,我就选个三。这不就出来了。手机信息。对吧?哎,比方说啊,我要关闭s Linux选五,它就被改了啊,比方说我们要设置阿里云的一条元,那我就写八。你看它就设置完了,这是不是以后你上班你就可以参考人家这个,你看这还有这个HD编译安装看到没啊,编译安装人家也是用脚本写的,六编译安装看行不行啊,你看看直接一键安装,从网上直接给你下个源码,下面源码然后帮你编译是不是做的好啊。
10:11
多厉害,哎,这真正的一键重,嗯,但是这个下有点慢啊。那你们可以研究一下这段脚本咋写的,当然这个脚本里面肯定没有用到select啊啊,如果用到select,一个风格不应该是这样的啊,它是纯粹容易用Apple打出来的,一个一个的啊啊,所以这个脚本我觉得39期同学写的,相信大家应该也能写出来。啊,这个脚本大家看它就是用变了个死循环,然后A口一行要打啊打出来的啊呃,脚本也不太多啊,200多行啊200多行,当然有些还没学呢,咱们有些咱们还没学啊,但是至少你可以参考。
11:08
啊,这个也是咱们上课期间写的啊,所以人家那上课几点写,你是不是也能写啊。对吧。啊,这个脚本我已经放到咱们的。共享里了啊,大家可以参考看。所以实际上写脚本也没那么特别难,无非就是你下点功夫多写一些就行了。好,那么现在呢,我们给大家介绍了比较最常用的各种边线的语法。那接下来还有一个非常重要的技术叫函数,这个函数呢是我们用的非常多的一种技术。函数的思想就是将。
12:02
我们的脚本给它模块化。那因为我们如果涉及到一些比较复杂的脚本。全写在一个脚本文件中。就会造成这个脚本臃肿。不仅臃肿。将来维护起来后续会比较麻烦,假如说我写了个脚本,动不动好几百行,那将来我要改的话。我觉得从头看到尾。那看到为往后看的时候,看到后面忘了前面。那等你把这段脚本看完了,理解了,那这个花比较长的时间。而且呢,有些功能我们可能会反复用。那么有些反复用的功能你都混在这个脚本里面,如果我下次只是想使用这个脚本中的其中一个功能。
13:00
那你现在都写在一个脚本里,我没法把它提出来单独用。而函数的功能就是把我们一个大的脚本按照功能给它切成模块。然后给这个模块起一个名称,就叫函数的名称。大家说到函数呢,应该想起来我们初中的时候学过函数。那函数,比方说有什么三角函数是吧?啊,那三角函数,那它是不是就是一个计算公式相当于。那么我们只要知道了这个函数,再传一些参数,是不是就可以做计算了啊?比方说sin这个三角函数,我们是不是传一个值,它就可以做它的计算?这是公式,是个固定公式。那么函数跟我们现在讲的函数这个逻辑上是相通的。我们事先可以写一个函数,具有通用性的功能,然后下次呢,我只要传不进去不同的参数就可以让它。
14:06
对相同的这个函数反复使用啊,你传参数不同,我就计算不同的公式,计算不同的数字就行了,所以函数就可以起到复用的效果,不断的重复使用。从而实现了模块化线编程的思想。那么我们将来可以把一个脚本,利用函数的思想把它切成若干模块。切成不同的模块。以后,将来我们就可以。反复的使用,而且呢,用这种思想。这个程序代码会看起来非常有条理性。啊,每个模块咱们用一个函数来实现,那接下来我们分析这个语句的时候,那么这个功能分的很清楚,一个模块干什么了,另一个模块干什么了,我都看的清清楚楚,所以这个模块化编程思想是非常有利于我们做比较复杂的软件开发的。
15:08
尤其大的脚本,用这种方式非常好,那下面呢,咱们来看看函数怎么实现,函数的语法要创建一个函数。那么它的语法有三种语法。这三种语法分别是函数名。加小括号。然后再跟上一个。函数体的定义。啊,这个外面是有画括号的,那么除了这种语法,它可以用function,就是关键字照抄就好了,然后这个是函数的名称,然后没有加小括号,再加函数题,第三种呢,是全都有了function函数名加小括号。这三种语法都是可以实现函数的。
16:01
那至于这个函数体,由你自己来约定。那你可以把它想象成一个相当于别名。大家记得我们在以前最早学过Linux的别名,那别名这你就可以把它显示成一个函数的名称,现在别名当你一旦定义完这个函数以后,下次你就用这个名字就可以代表着一串命令了。那这样的话呢,我们是不是下次再想执行这些命令,就不用再写这些命令了,我们就写个函数名就好了。哎,所以有点像别名的效果,不过别名呢,在编程序脚本里面能用吗?脚本能用别名吗?脚本里面是不支持别名的,所以为了你也可以这么想,那脚本里面不支别名,那我们就用函数来代替它不就得了吗?那我就定一个函数啊,就有点像代替别名的效果,我们用这个函数名代替你想执行的啊命令,那将来我下次就不用写这命令,我就可以用函数名,实际上就是别名类似的啊。
17:11
别名实际上功能没那么强大,因为别名不支持参数传递,他这还支持参数啊,传不同的参数进去,让他干不同的活,所以函数呢,你可以认为就是能够实现持久化保存的功能更强大的别名啊,扩展了别名的功能。啊,那接下来我们来看函数怎么去定义啊,当然这三种方式都能实现函数定义,呃,要是你的话,你选哪种啊。啊啊,你会选第一个是吧,因为第一个最简单了吧,啊,所以我们确实好多人会用第一种啊,当然三种都可以的啊,那下面我们就来试一试,哎哟,这个还没下完。太快了,好像,那我们就开一个新窗口吧,看看他这个脚本能跑完能不能成功啊,我也不知道他能不能成功。
18:04
那在这我们来看,那我们就写个函数名假设啊,当然函数名应该不要和你的系统的命令冲突了啊,因为冲突了就像别名冲突了一样,这是不是不是好事啊啊,所以我们找一个没人用的啊,比方说函数名为了和我系统的命令加以区分,我加一个放开头,表示我这是函数,然后我这个函数干什么呢?啊,比方说很简单。就是测试吧,小括号,然后画括号,然后里面你想干什么,你就可以写。比方说我就想执行一些简单命令。好,这就完了,这就完了,那这时候这个函数呢,就定义完了,函数定义完以后呢,我想用的话怎么用呢?你直接把它当成命令执行就行了,你看出来了吗。那你想这个功能是不是就跟别名差不多呀。
19:03
对吧,别名不就这么用吗?啊,第一个别名,然后下次一调用就完了啊,当然函数的功能主要是在脚本里用,而不会说是在这个交互环境中用,因为交互环境中用,实际上咱们有别名用不着这个。那所以我们把它写在脚本里面,那假设我们实现一个功能,用函数来实现干嘛呢?就判断咱们操作系统的版本号啊,我想判断一下我是森tos还是乌邦兔,因为SS乌邦兔的命令不一样。啊,所以我们现在想判断一下S还是ubtu,那我想实现用函数来实现,这个怎么实现。判断是Ubuntu还是Windows,这个怎么做呀?
20:00
怎么怎么实现啊。他这个走一票员走的太慢了,哎,好像还可以再安装对应的依赖包。判断你是乌邦兔还是S,实际上有好多方法,咱们在系统中版本可以用。看文件的方式,比方说OS release,你看这里面是不是写的是centers包含S字样,那如果是乌邦兔,我这我看我那乌邦兔是不是活过来了。还死在这儿了?好起来了。啊,你看这个乌邦兔怎么判断呢?也是看这个文件就好了,OS release,你看这里面带的字样是不是就是有乌邦兔的字样啊,所以实际上我就判断一下这两个文件里面涵盖包含的是乌邦兔还是包含的是SS不就得了吗?
21:18
对吧?哎,所以我们现在就知道怎么判断了,那现在我们用函数来实现,怎么实现呢。哟,好像装完了,人家你看没啊,真的执行了吗?我们试试啊,看看他这个阿拉奇是不是执行装成功了。啊,装是装完了,但是他好像只是,哎哟,他这还出错了。38行出错。出错啊,这个编译安装出问题了。编译安装出问题了,这个版本可能适用于七版本,八版本可能够呛,八版本不支持。哎,我这个版本2.4.25,我本身带的这个版本比比他还细呢,这个适合于。
22:07
你看我这个四身带的版本比它还新的,所以这个适合于应该是比较老的版本啊,就是四七上你去试一试应该是可以的。好了,那现在我们就判断一下吧,怎么判断呢?啊,那我们就过滤,如果带有乌邦兔字样。那自然它就是乌邦兔呗,对吧,哎,乌邦兔,那我就返回一个结果乌邦兔。否则那我们就返回的是三道。这是不是很简单的一个判断就可以成功了是吧?啊,我这个IP地址是多大。
23:00
100。呃,找到了,找到了,但是我不想去看它的结果。加Q。看到没?这是不是就成功了啊,这就这个命令,那所以呢,我们现在就可以编一个函数来实现了,那编一个函数实现,那将来我们就可以再这么来写。比方说我们想初始化系统,初始化系统,这一个初始化系统呢,我们用函数来实现,函数实现呢,就是操系统的判断啊操作系统,哎,把这个打印一下,那这个操系统呢,它返回的结果就是乌光兔或者渗S,然后如果那我们的OS执行的结果是S。
24:14
那么我们就用亚门安装软件。如果是。Ubuntu那么就at安装是吧,哎,所以我们现在呢,把这个OS这个函数执行一下,执行完了以后呢,我们把它的结果附到一个啊,结果附到一个版本里面,比方说OS的version。然后呢,我们直接对这个O来进行判断,SOS啊,看他是否是不帮兔。啊,如果是无帮铺好了,那我们就。
25:02
那我们就用PT安装对应的软件,比方说你工作中PT上面啊,亚M安装啊,你需要装什么软件你就装就好了,比方说我们装个VM啊,装个w get啊,都装个扣啊啊装个tree啊,反正你需要什么工具你就装嘛啊,然后否则因为在生产环境中,我们可能没那么复杂啊,就是比方说通常来讲就要么四度是要不无邦兔啊,所以如果不是无邦兔,那我们就当成SS,我们是不是就出入安装别的样M就行了啊,比方说别装这些工具啊,什么威尔shark之类的,这里面有些包它不一样,你像这个包呢,叫阿帕奇二。2872,那咱们这里面呢,在这里面叫HBD它不一样,那这个可以看一眼啊。
26:04
啊,看一下诶这怎么。又崩溃了。看是不是动不动就崩了,那我跟他还一下吧。崩溃了。好,那我们就现在那个。现在S上来测一下啊。好,那我就这样写了,这样来写,把这个有点删了,删了就TCB好,这样的话呢就可以了,Fi好,那现在我们来走一遍,看它会不会实现。
27:14
哎,你看。成了吧。你看因为我是Windows嘛,所以他装的是HABBD。啊,那如果你是乌邦兔,他应该装那个阿PA阿帕七二,我这已经恢复了,然后把它砌一下。啊,我这以前写过一个那个初始化的推荐的一个包安装列表。啊,起来了啊,看它的IP是多少。
28:03
101。101地址是没错的。101。好,再连一下就好了。啊,那现在你看在apt英货看看它那个阿872是不是叫阿七二。嗯,不叫in,叫list是吧,列一下。
29:04
2872啊,他叫2872。所以呢,它这个软件名不一样啊,那我们现在呢,这个脚本应该是可以通用的,那我们把它拷到不帮兔上来试一试101。好拍过来了,拍过来以后呢,我们来看一下这个不光兔上能不能跑这个脚本。你看。应该可以跑。那他是不是判断出这是乌邦兔来了,然后他就用apt来装那个2872,你看见没,2872不是起来了吗。看到没,那当然2872呢,现在这个服务呢就起来了,起来以后它的八零端口也好可以了,那现在我就可以访问了。
30:00
101。是乌邦兔的阿巴提。这个界面。那这样的话呢,我们是不是就轻松的实现了。版本的判断来用函数实现的,但是呢,大家想过没有这个脚本,虽然说功能很简单,但是。你们不觉得这段脚本将来可能会在很多很多场景下都会用吗?那既然大家都会用。既然大家都会用,那我们是不是更加好的方法,是不是就应该把这段函数拿出来,因为将来不一定用这个,但是这段功能还是反复用的啊,所以我们将来是不是可以考虑把这段东西拿出来,拿出来以后将来在别的胶水将来可以调用它。这段不呢,我不一定用啊,这个我们可能会用。
31:05
那这个怎么实现呢?那就是把它单独提出来,专门写一个函数的文件。那么这个文件把这段拿出来,这里面只放函数定义。啊,不知道大家明白不明白解放函数定义,当然我这是判断操系统,那么判断操系统完了以后,那将来万一六七八,我们这个678这个版本也不一样。所以我们接下来还要判断操作系统的版本号,所以我这再写一个函数,这个函数来判断678的那个深是678,它的命令也不太一样啊,有些功能也不太一样,Version,那怎么判断678呀,那进一步的再判断吗?那是不是我们先执行。
32:01
什么OS的情况下。我判断一下OS是渗透S了,我再去看它的678版本对不对啊,所以我们先执行一下OS,然后根据OS判断一下OS是个命令,是个函数,那我们就直接执行一下,然后根据它的结果,如果是sentences。好,那我再去才去判断它是森豆四的七还是678,那问题是我怎么拿到678这个版本号啊啊,678这个版本号怎么看啊,那个文件里有那个678的版本号,Read had release,这里面就有。
33:01
啊,当然这里面我们怎么去拿到他的。这个678这个数字。那你看这个七的话呢。在这,那我就要这个大版本号啊,大版本号。啊,至于是六点几还是七点几,我就不管了。我只要这个大版的号。那怎么把这个数字取出来的?这个怎么取啊,8.2这个八个你把它给它取出来。最近没?
34:02
是不是可以取啊,咋取?先写上扩展的正的表达式,咱取吧。这不就是从左到右取出第一个数字来吗?它不就是第一个数字嘛,那所以呢,我们就搜索。搜索啥呢?从行首点星一直到空格数字零到九,当然可能会一个两,因为万一将来会出来什么奋S10奋11,所以可能会有俩数是吧,然后后面呢,就是点了吧。后面就是点了,那但是点往后我就不管了。那这是不是就是把这个东西把它分组一下就行了。告诉我。
35:00
然后斜杠1P不就完了吗?那这个命令通用不通用啊,我们在六上执行一下,七上执行一下没问题吧,这不就取出来了吗?啊取出来以后呢,我们在这把它加上,取出来以后把它附到一个变量里面啊,或者直接打印也行。那你就直接把这个结果打出来也行啊,这是直接返回结果,这就是直接返回结果就完了,这个命令就直接出来了,这不就六七就678就出来了吗?啊啊,那这时候呢,你看咱们这个函这个文件就专门定义函数,啥也不干。啊,专门定义函数啥也不干,那定义完函数以后呢,将来我们想用的话怎么用呢?假如说我自己编了个脚本,我就想根据是SS啊678来决定到底我去做什么,比方说WINDOWS8,那深度八的话呢,那我们去。
36:13
安装软件用DF安装啊,如果是SS6SS7,那咱们用亚M安装啊,或者八版本,它的这个工具用法它不太一样,有些地方发生了变化,有些比方说软件名或者包名啊,有些变化。那这个我们想实现啊,那怎么做呢?嗯,这么做。那我们就来实现一下啊,比方说我们就想安装HTB这个软件,我们用亚M安装就好了,并且安装完了我还要把它扶起来。哎,那这时候我们怎么去引用那个函数啊,那个函数是在放在函数文件里的。那函数文件呢,被我们放在了这个叫function这个文件里。
37:04
那我要用它怎么用呢?诶注意用的话是点点呢,就跟我们以前说的S是一样的,写S也行,后面跟上function,跟上这个文件。这样的话呢,这个文件就被我加载到内存里了,加载内存里面那两个函数是不是相当就被定义了,我们这么写啊,就是我这么写就跟什么一样呢,就跟我们把这两行复制进来一样,听了吧。你这么写就跟把它复制来一样,你执行了吗?但是函数呢,光这么定义,它只是说定义了不不会调用它,所以我们接下来要调用它啊啊,那么我们现在去写一个点点就行啊function好,这就相当于定义了,定完了以后呢,我们就可以来实现了啊,比方说我们就实现一下if。
38:04
那刚才我们不是有一个OS的version吗?OS的version这个程序的执行结果不就是678吗?啊,那我们就判断一下吧,如果是。呃,六怎么怎么样,如果是七怎么怎么样啊,当然你可以还可以简单一点,我们就把它干脆附到一个变量里也行。这样的话,绳子我写这个了。我把这个函数执行一下,让它附到一个OS version的变量里,然后我们现在就可以这么干了。怎么做呢?Kiss kiss Dollar OS。E,如果是六是吧,我们怎么办啊,六的话呢,就是亚M安装啊,比方说安装HD装完以后呢,我要把它启动起来,启动起来六的启动方法是用service hpd start啊七的话呢,就不一样了,七呢也是用亚板安装,但是它的启动不是用这个,是用这个启动,看到没?哎,那八。
39:29
八又不一样啊,八用的是DF啊,启动服务用这个啊,当然其他的。啊,其他的,那其他的那我们是不是就是版本错误。是吧,无法执行啊版本,假如说我就打一个版本,错误版本不支持吧,是吧,不支持啊,这个封号加不加都行,因为这是最后一个了ESAC。
40:18
看到没?这不就写出一个相对通用的一个脚本吗?将来你在什么版本里面,这个脚啪一跑,你将来就可以写一个初始化脚本,这个初始脚本678都能用。对吧,678都能用啊,无非就是中间这一段,你写成对应的你的配置,而且呢,有些如果一样,你也可以反复用,比方说有些功能啊,比方说禁用s Linux的配置都是一样的,所以你就可以在这里面去调用那个函数,大家都可以调用,因为都一样。啊,就可以用函数好,那这样的话,你看我这个脚本就写完了,写完以后呢,我们来看一下当前我这个APP装没装。
41:00
啊,我这应该是没诶装上了,刚才装了是吧。那装了就卸了它,或者我把它拷走吧,呃,拷到哎现在有个问题,我要考是不是得俩都得考,因为这还它依赖于这个方式文件呢,是吧,哎,比方说我考到七上吧,因为七上。这个应该是我们没有没有做过那个安装的,这个没装啊,那么现在你看我这个脚本是在八上写的,但是我将来希望它能通用。将来在七上也能用哟,这个是为什么,是不是刚才把我们给禁用了,因为我们加防火墙了,把人家是吧,禁用了我自己连不上去了,哎,现在可以了,我把这俩脚本都给它拷过来了,拷过来以后呢,现在我们就可以来跑一下了,HBD你看全能装。并且装上服务也服务能起来,哎,你看可以用啊,能不能用呢?我们来试试吧,打开浏览器,这换成七。
42:12
七没问题吧,当然这段脚本应该是适用于六的。所以六上应该也能用,不过六上默认就已经装上服务了,六上这个HP服务是装上的,所以我把它卸了。好,然后呢,考到六上去。好,可六上去以后,那我们就跑一下。呀,有问题,确实还有问题,这出了一个啥问题呀,就这个六上它没有这个OS文件,这个文件它不存在,知道吧,六上没这个文件。
43:07
啊,不过呢,倒不影响我们最终的结果啊,啊,大家看六应该也可以访问了。啊。所以这样的话呢,我们是不是就实现了一个操作系统的U邦tuss到底是678分别判断了应该用函数实现的。啊,所以这个函数呢,就起来的好处就是反复可以使用,那么在咱们的Linux里面确实有好多函数。这个函数啊,你可以用declare可以看到咱们系统自带的函数,像这个就是自带的一个函数,你看这个函数叫us。这个函数里面就嵌入了好多if。那在八个上面。谁家也有declare?
44:04
那这就是系统自带的函数,看到没自身携带的函数。那这些函数从哪来的呀?哎,他是从这儿来的。你看这里面是不是有个方式文件,就这来的。那其中这个函数啊,在4637S8上都有这个文件。你看它有一个叫function的文件,这里面就定义了好多函数。这些函数啊,有些你要觉得好用,你可以是拿过来用的啊函数。25。这全是汗水。那函数呢?它可以支持参数,这点呢,可以增强函数的灵活性,函数并不是说固定死的功能,它可以类似于脚本后面跟参数的方式来让它变得更加灵活。
45:03
比方说我们可以编一个函数,这个函数来实现读取后面的参数来达到不同的目的,我们都知道边脚本,比方说我们写个脚本,后面可以加上参数ABC之类的,那函数也可以支持那函数它去读取后面的参数的时候,比方说我们假设定立了一个函数,这个函数呢叫test,这函数函数后面也可以跟参数,那么在函数里面跟参数,那它怎么去识别A和B呢?也是用得一得。啊,它也是得了一得二啊,所以呢,我们现在就可以这么来实现一个函数,比方说我们用函数实现,哎,刚才还记得我曾经编了一个那个颜色是吧?啊就是那个象棋,哎,你看这个象棋他就怎么做的呢?就这么做的,你看这就是一个两个函数实现的啊。
46:09
这是显示红色,这个就是纯粹打红色,这个是纯粹打黄色,你看这是打红色啊,你看看他是红色诶。大大红色。啊,这个是打黄色。这是红框,然后呢,你看这就加了个参数。这个到了一就是这个函数的参数,它的第一个参数。那如果后面有跟DO2DO3,就是跟第二个第三个呢,分别就是DO2DO3。呃,所以呢,我们现在定义了一个。Re。YY。那他对这个参数进行判断,如果这个参数是R1就杠R,那我就先打黄再打红。
47:00
如果没有根,反之就先打红再打红。那将来怎么用呢?那你看这是就先。红黄这个是相加,R就反过来。那么加这个就是先打黄再打红。这不就让他支持参数了吗?啊,最终就实现了一个。国际象棋的打印。看国际象棋的打野,就这这么就很难了。大家能看懂吗?那这里面for循环只for循了四次啊四次。这是for循环四次,当然这个for循环说是循环四次,但实际上里面它有小循环,这也是四次。那这个for循环四次。他是四次了,哪四次。这是不是就是这是一次,这是一次,这是一次,这是一次。
48:02
啊,然后呢,这里面也循环四次,这循环四次是循环这个小格的。这是不是一次两次三次四次对吧,哎。啊,所以它这个循环是这么来实现的,然后这儿呢,它又循环了八次,就底下有八次,八次循环应该是这样的啊,它这个是循环了,这个这是一次,这是一次,这是一次,八次,八次分别把这大格打出来,然后这里面再再嵌小格,小格打。被循环四次。啊,这个实现了这样的一个功能。好,这个有时间你可以看一下热热代码怎么做的啊。啊,那么现在呢,我们就可以加参数的方式来实现了啊,参数怎么实现呢?嗯,啊,比方说我们通过这个计算,用一个函数来计算,计算两个数字相加之和啊,那我们就可以来写个函数。
49:05
啊,叫什么呢,叫那这个计算怎么计算呢,很简单,我们就。把两个数字相加打出来就行了,怎么打一呢?就是DOLLAR1加DOLLAR2 dollar1得就是它传过来的两个参数。啊,计算完了以后把它打印出来啊,那这个函数,那我们来看一下,我们SS一下,看看能不能计算,比方说二和五看见没是不是成了。这不就是一个很简单的。函数,它只是参数。对吧,参数参数啊,随便写一个数字都可以。那到一到那就是这样来实现了。那么将来这个到一到二。
50:01
他是从用脚本传进来的。啊,脚本。我们将来可以在脚本里面去嵌入,比方说我们这写一个test的脚本,这里面去调刚才的fraction函数,然后呢,我们在这就可以写。写什么呢?诶,我这写到一个高栏。好,那现在是这样,我们这里面不仅有加,实际上还有减,那我再写一个减的函数,那减那个单词怎么写。啊。呃,减总和是这个,把这个换成加得了是吧,换成加,这叫and减那个单词怎么写,有没有再查一查减那个单子咋写,给我发一下加减乘除。
51:06
英语好的同学啊,是这个吗?那就信了你了啊,这是减少的意思是吧?这是减少的意思,这减是这个减吗?这个感觉不像呢?啊,对了,我觉得袁鹏这个写的还靠谱,这个看起来有点像。Subtract,应该是这个吧,我感觉是这个啊,但是这个感觉啊,不知道对不对。这个这个这个感觉是像的。减去嘛,是吧,减法啊减法嗯。好,那就用这个吧,啊,那也是无非就这两个数字一减就行了。
52:01
好,那现在问题来了,我们想编一个函数,编一个脚本,这个脚本既能加又能减,我们想实现这个功能,就是后面如果加R的,那么它就会把后面这两个数字相加。如果你这写个减,比方说是这个单词啊。后面跟这个,它就实现两个数字相减。这个怎么做呀?也就是说后面跟的这个东西不一样,他就会对后面的动作参数处理方案不一样啊,这个将来工作中还是很实用的啊,将来我们就可以写一个复杂的脚本,这个脚本这个指令决定了后面我们要怎么处理它,相信大家现在学到这应该知道,你看我们好多命令不都这么干的吗?比方说IP root啊,IP address是不是这后面他跟的东西就不一样了,将来对不对啊,如果是address,那你这后面跟比方说跟一些指令,哎,Root跟的指令不一样,这不就类似的吗?那这个现在我们要想实现这个功能怎么做,那个函数已经写完了啊,函数我已经写完了,那我们就这里面无非就是调用它就行了,那调用它,那是不是我们要判断它那个第一个参数是啥,我是不是要判断一下,Kiss一下,判断DOLLAR1到一,如果是and,如果是and。
53:33
那我是不是就要执行and函数啊,那么这时候我应该把那后面两个数字相加,那后面两个数字相加是不是二和三相加对不对?哎,二和三相加啊。那如果后面这个是。Subtract。
54:02
那自然就是我们要执行subject减。对吧,啊,但是其他的呢,我就不做计算了。啊,比方说就打一个错误好,然后呢,我们去写EAC好,那看看能不能执行成功,比方说and相加。成了吧,然后这换成subtract。对吧。啊,这不就实现了一个功能吗?当然这个地方呢,需要注意的就是你这写了个二三,但是在函数题里面它当成了什么一二,因为你传进来的时候,虽然你这个脚本里面啊,你这个脚本里面你叫二三,但是对于函数来讲,你是不是第一个是不是,所以函数题里面是不是把你这个脚本里面的DO2认为是它的一,第一个人家认的是DO1,你这的DO23实际上对于人家来讲相当于DO2是不是。
55:30
所以大家别给搞糊涂了啊,它传进来的话,函数在函数眼里头你不是第一个了嘛,是不是,但虽然你对脚本来讲,你是第二个。呀,那这个东西我们就更灵活了,那我们是不是就可以将来写个初始化脚本,比方说我们后面写SE一个字啊,后面写这个配置亚,你是不是就可以加不同的东西干不同的活了,跟亚么就可以后面跟亚么,比方说后面跟亚M跟上EPL,就是配亚M的EPL。
56:09
啊,跟这个,呃。跟这个extra extras那就是配置extras啊,那后面比方说我们还可以跟上那啊SE lix啊,我是可以把它禁用网卡,禁用这个C功能,或者启用C功能。这就可以加不同的参数。所以呢,将来你就可以写一个综合脚本,知道吧,这个脚本什么都能干,就是后面看你加什么了,他都能做。啊,都能做啊,比方说最简单的就是我们这儿可以这样来写,这叫安装HTTP,如果你这么写就是把HP服务装上啊,如果我们这写MYSQL,那就是把MYSQL装上。
57:13
那同样的,那这个地方写个remove,那就是卸载某个软件。甚至我还可以查,后面跟上查,那你这查就是他的状态。你写一个通用脚本,这脚本反正后面跟上他就能干啥。能明白这意思吧,我们将来跟的不是一个参数啊,跟的是一大堆参数。是不是那这个脚本就功能很强了。他跟的参数不是一个参数,跟的是一堆参数,嗯。那下来这个status。你是不是也可以用函数来实现?这个函这个就当函数了嘛,这是函数名嘛,啊,这拿一个函数来实现。
58:05
是吧,这不就可以做了。这个尤其在后面我们学到一些复杂的业务的时候,你要不用这种方法,你会写一大堆脚本。你想想这个每个功能是不是得,如果要用脚本就得单写一个,你要是用这个方法,是不是一个脚本就全干了啊,不过这个脚本就是你要把它学会模块化,用函数实现,这样的话一个脚本就都做了。一个脚本就都做了。啊,这是函数的这样的一个用法啊,当然函数里面还有一些比较有用的用法,比方说它内部的还有一些自带的变量,包括还有函数的嵌套,这个嵌套呢,叫递归啊,不过这个问题更绕,咱们稍微休息会,待会回来给大家介绍。五点啊点回来。
我来说两句