00:00
好,那我们接下来继续学习12编程,刚才我们讲了第一种条件判断的写法if,那这种写法呢,它比较适合这个比较复杂的条件判断啊,在有些场景下用if和else写法会觉得会很啰嗦啊,举个例子,比方说我们就想判断一个变量,它的值是否是某个数字,比方说你是一。或者三或者五,我就想执行一个命令啊,如果不是这个数字,比方说是别的数字,随便写几个啊,然后如果是这些数字,我就执行一条,那在这种情况下,如果我们要想实现这种数字的判断,你要写成一。大家想一想,写起来是比较繁琐的,为什么繁琐呀?你说有一个数字有一个变量是135,你怎么写?哎,你是不是就是比方说ID这个变量是一,那比方说我们用EQ1是不是我还得再写二,ID是不是还得写什么?EQ等于三,是不是还得杠O。
01:20
就这么这么写,你这个写完了以后呢,你还得把它放到if里面啊,我得怎么写呢,If是不是就是这样写这样写。哎,这样写。还得从而括起来,这还只是实现了第一个数字的判断,第一个啊,然后执行什么命令一是不是这样啊?但是这个命令会很长,很繁琐,所以我们有更好的方法,那就是我们可以用K写法。Case,它也是一个条件判断的语句,不过呢,这个case写法它更适用于对于离散值的判断。
02:08
离散值的判断就是分散着它的值的一个一个匹配,那这个case呢,我们可以看一下它的用法。Case这写一个word,然后后面允许直接pattern,这个pattern指的就是通配符格式的模式表达。它允许支持。通配符。那如果这个word是在这个符合这个空背符定义的模式的时候,就可以执行命令,哎,所以大家看,当然写的一大行里,大家可能这个格式看的不清楚啊,那我们看一下我这整理过的格式啊,这个格式大家看这格式大家可能看的比较清晰了,那就是是当我们去判断一个变量的值是不是某个模式的时候,如果是这个模式满足好,那我就执行分之一,如果不满足,看他模式二满足不满足。
03:09
如果满足了就执行命令,就是模式二。那一直可以这样判断下去,如果都不满足星星,然后去执行这个最后的默认分支。这个心为什么就可以去匹配剩下的内容呢?就是因为它用的是通配符,我们都知道通配符的心什么意思,是不是任意字符串啊,所以我们这个地方,那就是你前面都不匹配,那么肯定星是匹配的呀。对吧,它就可以用这种方式,那这里面呢,它可以支持通背弧,比方说问号啊,中括号啊,这个竖线呀,这都支持。所以刚才我们刚才想实现的功能,如果用kiss写,那就非常简单了,怎么写呢,这样写kiss啊,我们用ID啊,In后面跟上你匹配的内容什么呢?比如说一三。
04:11
五或的关系不就完了,哎,我们加上一个竖线,那那这不就实现了吗?多简单呀,想执行命令一,那就写命令一呗,注意这个地方有一个分号啊,必须写这个语法要求,然后不是135,比方说是随便写是这个数字,那就把它写上不就得了吗?那就是互的关系加竖线隔开就行,就这么简单,哎,那这时候呢,我们再命令二,然后两个封号,注意这个地方有两个封号是语法要求啊啊,你看官方这里面都有封号是吧,这个是要求语法,然后都不匹配了,那我们就来个什么这个星号就行了啊,比方说就是命令三这个最后这个封号加不加都行了啊,反正它最后一条命令啊,然后EAC反着写的,这就行了。
05:03
所以大家看如果是这样写,是不是这个语法明显感觉简简洁了不少,比那个if else要要清晰是吧?哎,所以我们将来在什么场景下用if。If和kiss呢,就是case,如果是作为变量的数字,或者是散列值的匹配,就是它不是很连续啊,它表示的是某些值的一个匹配的时候,哎,我们用这个case是比较合理的,比方说我们用case来判断输入yes,那我们这个就可以来做了啊,比方说我们来写一个no,判断yes no的一个脚本,刚才我们曾经写过一个,不过那个只判断yes,没有判断yes no啊,你看这个就是我们刚才曾经用过的这个写法,这个是用的短路语,短路库,它只是判断了yes,没有判断no,那现在我就可以判断yes or no。我们用P写法来实现,怎么写呢?就是还是请你输入yes呢,看P啊,比方说问你说你是否同意嫁给我是吧,啊,Marry marry me,是不是yes or no。
06:21
对吧?哎,这个就是你的答案是吧?那当然这个单词是不是这个句子不对了,这个marry me是这么说吗?还是marry with me啊。有英语好的同学们来说一说,是嫁给我还是这个就这个意思了啊,你能听明白就行了啊,你看这个时间长了,老不用英语都忘啊,这个这个我原来英语是英语课代表,现在你看英语退化到这样的一个程度了,老师啊,是吧,Will啊will啊也行啊,那现在这个答案呢,就放在了answer里,那接下来我们是不是就要对这个answer来进行判断,Case啊,这个变量进行判断啊,那你回答的是yes no,当然它有可能是各种yes,各种yes,奇怪的yes思咱们都算,那这个怎么写啊,难道真的把所种组合全写上,那这个太痛苦了。
07:33
那我们简单一点呢,他写啊,我们刚才曾经说过一种方法,就是大Y小Y竖线做,是不是大Y小Y大E小E大S小S。对吧,这不就行了吗?哪哪多了呀,哪多了,这个表示的就是一个Y或者是一个yes是吧,一个yes好,然后呢,我们就打一个yes AMD吧,是吧,AMD不就是yes。
08:27
Yes越密,那当然他可能会输no no的话,那我们同样的方法,那就是N或什么是吧,谁是弄我啊英特尔好吧,英特尔是no,英特尔实际上很好的,就是有点贵是吧,呃,当然那你又输错了,那我们就呃,就是这个,呃。
09:05
你输错了,输入错误,输入错误,然后exit退出报报一个提示啊,当然最后这个分号写不写都行,然后EAC是吧,这就可以了。那这个脚本我们考一遍看看,然后输入一个特殊的yes。嗯。诶可以,然后输一个随便写的,你看可以吧,说一个弄。也行,是不是输一个随便输的,那当然就输入错误了,当然了,如果我既输入yes又输入no呢。输入错误看出来了吧,成功了吧?这不就实现了yes no的判断吗?啊,这段脚本将来你们将来生产中需要的话,就现成的啊,拿回用就行了,拿走不卸啊,还不至于。
10:07
嗯,那这段脚本就判断yes啊,就可以用kiss来实现。哎,那么用这个东西呢,将来我们可以实现一些这个,呃,文件的处理,比方说不同的文件后缀,我们将来用不同的方式来处理,我们下一章马上就给大家讲文件啊,这个压缩呀等等,压缩格式有很多种,比方说有什么GC后缀的啊,有什么ZP后缀的,有XZ后缀的,有BZR后缀的啊,这个这个反正是,总之他这后缀还很多,C后缀的有很多,那不同的后缀他们处理工具是不一样的。啊,所以我们现在将来你要判断文件的后缀,文件的后缀用不同的工具来处理啊,这时候你就可以用case了啊case那比方说如果是GGZ后缀的,哎,你用这个GZ供去。
11:01
来处理啊,如果是BC就是VIP后缀的,用VIP来处理,哎,如果是这个这个C后缀的,那么C后缀的啊,Z后缀的用com来处理,这些命令都不一样啊,这时候呢,你就可以用这种方法了,当然你取文件后缀怎么取啊。文件后缀咋取啊?比方说现在我要去判断S这个是文件后缀啊,这个文件后缀,比方说请你输入一个文件名,请你输入一个文件名啊,那我们啊,这个输入一个文件名叫read,输入一个文件一个文件。啊,那输一个文件名,那这个文件名你要把它的后缀取出来,因为咱们判断的是后缀嘛,啊判断后缀,把这个后缀放到这个fair,这个subject这里面,那问题是我怎么把这个文件名的后缀给它放进去。
12:13
啊,怎么放后缀呀,那你比方说我们现在有一个文件,我写了一个a.a.a点,呃,GZ,那你要把这个后缀取出来,你怎么取。取后缀怎么选,那比方说它有可能会出现这样的名字啊,比方说是a.b.c.DC它也可能是什么a.GC那不管怎么样,我只看最后那个怎么样,最后那个问题是他前面的点还不确定一个啊。这应该怎么去,那怎么去break-O,因为有贪婪模式嘛,所以是不是贪婪模式点心斜杠点,然后最后。
13:15
这个应该是什么后缀呀,那最后的后缀怎么表示?那我们这写一个呃,小括号。点心,但是你这样做的话,他这个是全都匹配出来,对不对,你匹配不出来,匹不出来啊,这个小括号相当于白写了啊,因为你这个是扩展的,真的表大这个写写法没有用。不是我们光要这个GZ,别的都不要,光要GZ,怎么把这个GZ取出来?不是点结尾的。
14:01
不是点结果。啊,那就是那从行首一直匹配到哪,匹配到最后一个点呗,那我们就这样写点心。那这个是匹配的是前面的微点啊,排除啊排除排除那就排没了啊,中国号啊,中国号中国号怎么表示啊。c.C点加。呃,扩展的表达式。哎,你这样取可以吧,他取出一个最后一个来,那这个是非点,你看这个把点给排除了。
15:05
把点排除了以后,那你这样做,当然我们这儿呢,可以加个Dollar。这是不是就实现了文件后缀的取发?因为不是点嘛。它实际上你你算的时候,你从后往前算。是吧,从后往前看,从后往前看到这不就是行尾吗?然后前面不是点留下是点的是不是就属于文件的名称了。对不对,所以这不就行了吗?所以这种方法也可以取出文件的后缀的。嗯。Rev rev反过来也行啊,Rev反过来也行啊,Rev的怎么反呢?Rev,然后再取它的第一个,然后再反过来,这意思吧,因为我不知道他后面前面几个点,那我们反过来不,它就是最后第一个了吗?啊,所以这个也可以啊,所以这个取文件后缀呢,有多种方法,当然这种方法比较巧妙,那就用这种方法吧,啊那那现在咱们就可以回到刚才写的这个程序里啊,这边那我们就用刚才那方法啊,这边把它取出来就这个。
16:34
那这儿呢,替换成菲尔。这是不是就是文件的后缀就取出来了,文件后缀取出来以后呢,我们这就可以判断它了,是GZ吗?啊,如果是GZ,那我们用G这块来处理,我就直接写了,因为们没学命令的,所以我就暂时先这么写了啊啊如果是呃,这个BV2就是不同的文件后缀啊,那这个呢,我们用一一条号来处理啊,这个忘了加分号了啊,比方说还有就是呃,还有什么后缀啊,XZXZ呢,也有这个对应的通击令啊,还有就是Z后缀。
17:31
Z,后缀呢,这个是用。com来处理啊,还有是VIP后缀的啊,这个呢,我们有这个VIP命令来处理啊,那这个压缩命令呢,压缩后缀很多的啊啊,当然我们现在暂时先这么说,这么说就行了,那就是除此之外的那就是other。好,这样的话呢,咱们这个文件后缀就知道判断出来了,判断出来以后呢,我们跑一下,比方说现在我输一个a.ez。
18:10
看看断出来了吧,哎,输一个什么这个这个c.D点随便写一个啊,随便写一个VIP啊没问题吧,都可以啊,所以这样的话呢,我们就把这个后缀呢,做了一个判断,哎,ABC.z啊都可以。将来无非就是再把你要执行的命令替进去就行了,理解了吧,什么的后缀,我用什么命令来去处理它就完了。啊,这就是一个文件的。这样的一个文件后缀的判断,未来呢,将来我们可以再把这个脚本完善完善啊,现在我们还没有做的很完美,只是把它判断出来而已啊,这就是一个文件后缀的判断。
19:05
好,那我们将来生产中还可以制作运维菜单,比方说我们将来可以生产中执行这段代码,这段代码写成的,我们拿过来跑一下看看效果,这个很有用,将来上上班以后好多事啊,都是日常性的。所以我们可以写一个运维的菜单描述work。好把这段代码写在这。
20:01
好,那这个命令它的效果是什么呢?好一点就知道了,请选择你先你想干啥,那我们先要备份数据库,一会说哎,执行备份数据库对吧?哎,明天想这个这个做一些软件升级,诶升级了,哎那天想做软件回滚了,软件回滚就是回到老版本,诶那我们想跑路了,哎也有命运对吧,你看,而且这个颜色还不一样。发现了没?这以后上班以后无非就是把你日常做的事全都写成脚本,将来每天上班点菜单就行了,123啪一点,你每天的幸福生活就过完了是吧?当然我这个脚本啥也没写啊,就是打一而已,哎,那将来无非就是把这些东西是不是替换成你想干的活就行了,替换成你将来的脚本吗?
21:04
是不是就写完了,就是运维脚本,你看诶以后啊,你写了会写脚本以后啊,说实在的,你的工作会非常轻松啊,每天挑个菜单,点个菜单,甚至中午饭都可以一块点好了是吧,直接下单对不对,写个脚本完事了。那你看这个是怎么做的,不就是用K来判断吗?1234来实现,那当然我们现在学的命令还不够多,当我们学完足够的命令以后,你就可以把这些要干的活替换成我们要干的事情,尤其我们选完数据库以后,你就知道怎么删库了。啊,那命令你就知道怎么写了,当然你现在不会三固,至少会三根了是吧,三根命令听上去也行,这样就行了,哎,这就是运维菜单,运维菜单,哎,现在你不一定写运维菜单,现在希望你们来做一个事,就是写一个初始化脚本,初始化脚本咱们现在的环境,上次我曾经写过一个要求大家初始化的一个配置文档。
22:29
啊,那个在这儿的啊,要求大家写哪些东西来呢。这边吗,是不是初始化这些东西,哎,那现在。再加一些,然后说别名。别名啊,你现在呢,将来你是不是可以做成菜单,做成菜单就意思是说将你一执行这个脚本,一是配置啊这个配置。
23:13
比方说配置防火墙。这是防火墙啊,第二是配置别名啊,第三是这个呃,修改网卡名王卡名,哎,那实际上将来你不是点那菜单不就完了吗?啊,当然你也可以再来一个什么,如果选四,所有以上都做都实现都完成。
24:01
这是不是就是你将来选个四,是不是就全给你做了。明白了吧,啊,比方说这儿还有安装必要的包。常用包,这都可以吧,那将来你是不是就可以写个这样的脚本了,把初始化的这些工作用脚本实现。应该可以了吧。应该能实现,嗯,所以这样的话呢,我们写一个脚本就可以做这些事情了。就实现菜单化的脚本了。啊,这就是刚才提到的,那写一个脚本,包括别名变量包,固定的IP设置,VM等等一些设置,你都给它设好啊,啊这个呢,希望大家下来可以试一试啊,那接下来呢,我们再来介绍一个编脚本必要的一个技术,就是循环技术,在曾经我们说过啊,这个线编程呢就三种逻辑,实际上所有的开发都三种逻辑,第一种呢是顺序执行,第二种是分支条件判断选择,第三种就是循环。
25:23
啊,那循环呢,就是不断的执行呗,执行很多次,大家看这个循环,这个图画的很有寓意啊,那你看这个一圈是不是老在这转圈,哎,当然实际上我们发现里面还有什么意思,就是循环里面还可以嵌套循环。循环里面欠循环,大循环里面套小循环。实际上大家现在没发现,你每天咱们来上课时间就是大循环里套小循环啊,每天早上来上课,中间休息再休息,再上课,一会上课一会下课,这不就是小循环吗?然后呢,我们每天都要做当天这一天上课的循环,我们要循环六个月。
26:04
这个六个月的上课是不是个大循环是吧,然后呢,每天的每天的一堂课,上课下课,上课下课,这不就是一个小循环,大循环里套小循环。所以这个循环呢,可能会嵌套啊,那么当然要循环必然就有一个问题,就是我循环多少次,循环的时候什么时候就退出循环了,就结束了,什么时候进入循环,这个呢,循环是有执行条件的,如果你不写条件就直接执行循环,那大家想这不就成了一个死循环了啊,所以循环呢,一般来讲是有执行次数的,所以我们循环在执行的时候有两种,一种是循环次数已经知道了,比方说我们循环100次。就结束,你像咱们现在的上课,大概预知课程应该是在什么时候结束啊。
27:00
计划是一月份前是吧,诶肯定过年前应该结束了啊,不会让大家过了年再跑到郑州来学习的是吧,应该能年前就结课啊,年前结课八月份啊,现在是八月八九十,十一十二六一月,好紧张啊,好紧张,有点紧张,这个课还真是有点紧张,那这个循环次数是已知的。那还有一种呢,就是循环次数我并不知道,并不知道,但是我可以写个条件,什么条件就是我不断的执行循环,每次执行循环完毕以后呢,我去判断一下是否这个条件成立了,比方说我们现在学习,呃,有些同学它的循环就不像一般普通同学,普通同学我们整个课程结束了,他就自行结束了,但是有些同学觉得学的不好,他要再跟下一期,他的目标就是什么时候把这课学好了,他再退出呢?
28:05
他才不直性循环呢,是吧?三朝元老同学,哎,也许你将来是四朝元老是吧?哎,听了好几遍,哎,必须要把这课听会了我才能离开,要不我不会放过马络的是吧?啊,这就是循环次数的不知道,那我们可以定一个条件来实现,那这个循环呢,它有多种循环指令啊,有for循环,有外循环和UQ循环。他们大概的执行逻辑呢,都是类似的,都是这样,先判断一下这个条件是不是成立,如果成立好,那我就执行循环,如果这个条件不成立,那我就退出循环,就结束了,然后这个循环如果成立了,那我就直行循环,直行循环完了以后翻过来再去看这个条件是不是成立,如果成立,那继续执行循环,那么这时候呢,如果一直成立,它一直在这转圈,如果哪一天循环发现不成立了,它就退出循环了,就结束了,记了吧,这就是它的一个。
29:04
逻辑当然这个循环我们说了有三种语法啊,第一种呢叫for,第二种where,第三种是to啊,我们先说说for for where until,那for呢,这个循环它的语法是这样,它有两种语法,不过呢,在四八上呢,它竟然只显示了一种帮助,在四度八上它的帮助呢,只有一种语法,但实际上四度七上呢,它有两种语法。大家看这是一种语法,还有另外一种语法,看到没有?所以这个八上也不知道怎么回事,怎么少了一种语法的说明啊,当然它也支持第二种语法,这种语法也支持。这种语法是叫C语言风格的语法。啊,我们先说第一种吧,第一种语法是这样的,For后面跟一个变量的名称,注意是变的名称,而不是变量的引用,什么意思啊,就是说这个地方不用加Dollar,就写变量门就好了啊,然后后面跟上硬word,这个硬卧呢,表示的就是一个列表,就是一个一个的列表,空格隔开或者换行隔开都行。
30:13
那如果这个英物的不存在,大家看英物不存在,那么它就会从什么。他会认为你是从什么标准输入的参数,就是那个那个参数Dollar Dollar APP是不是就是参数,就是我们脚本的参数来读,哎,来进行处理,然后这就是循环,那么这个循环次数由什么决定呢?由这个列表的个数决定,这个列表里面有几个元素将执行几遍,那么也就意味着我这执行写三个单词,空格隔开好,它就执行三遍,你写30个单词好,它就执行30遍。它这个意思,而且每次执行循环的时候,这个列表的第一个元素,第二个元素分别在执行循环的时候会付给这个内。也就是说,第一次就是进循环,它就会把这个列表中的第一个元素赋给它内部的值就是等于第一个元素。
31:04
然后再执行循环,执行完了以后呢,再把第二个元素再读起来赋给内,再执行循环,所以这个内的值,每次它都是从这里面拿出一个值来给它赋值啊,是这样的。什么时候这个列表取完了也就结束啊,那比方说咱们来写一个循环,那比方说我们就用ID这个变量吧,或者I这个变量E啊,然后后面跟上列表,比方说123456随便写,然后度,然后干嘛呢?我就把这个数字打出来,比方说这个这个I等于do I,再看理解了吧,是不是就执行了六遍,那为什么六变?因为列表里面它只有六个元素。然后每次A的值都是从那个元素列表里面一个一个取取出来的值,看到没有?当然这个列表呢,元素如果要手工生成岂不很痛苦吗?那我要是有100个元素,难不成手工去构成100个元素吗?事实上用不着这个元素的列表可以通过N多种方法,只要生成元素列表,都可以生成列列表元素,我们马上想到了我们之前讲过画括号,哎呀,这个多省式是不是?那么我们是不是就可以把它替换成方括号写法就好了?
32:25
是不是完事了,这个多方便呀,哎,那所以这个生成列表,它只要能生成列表,管你用什么方法呢,那事实上它还可以生成什么呢?可以生成这个用烘焙弧也行,比方说我们这儿写贝塔下的,贝塔下的。啊,大家看我这么。
33:00
看见没,我还可这么写,它可以支通配符,那通配符是不是,它也就是通配符这个东西不是就生成的是文件列表吗?对不对,这个你看你看生成的是不是文件列表啊,对不对,它也可以啊,只要生成列表就行了嘛,所以生成列表它都可以放在硬的后面。啊,你手工写或者用什么方法来生成列表也都行啊,当然你这实际上你可以写命令都行,比方说我就想把一些这个呃信息打印出来啊,放在这儿,那比方说我们就想什么呢?就是想把这个用户的名称取出来,我就想知道我的Linux里有多少账号,那取账号的话怎么取呢?我们的用户账号放在哪啊啊用户账号放在哪,我想把用户账号取出来。那用户账号是不是放在这个地方,用户名,用户名在哪啊?用户名的第一列吗?那怎么把用户第一名列取出来呀?Cat告那么好,这时就取出来了,好了,那我把这个东西作为列表的来源就行了。
34:10
明白了吗?啊,然后呢,我这就可以换了这个用户名user name冒号吧。是不是啊,这都可以啊,只要生成列表,什么方法都行啊,什么方法都行。哎,那有了这个了,那将来面试的时候有一道题经常出啊,就是让你算一加二加三加到100。那这个东西很经典,也是很出常出的一个面试题啊,这种题简直送分题啊,你可以写出好几种方法来,那我们最早的时候已经用过一些方法来实现了,比方说我们用以前的方法是怎么写的来着啊,APPLE1~100啊,实际上我们是不是用个这个写法就可以,是不是直接就可以啊,当然我们还可以用什么呢?
35:04
一到100,然后呢吗?TR空格加号,哎,然后呢,我们再传给BC对不对,所以这个方法很多种啊,包括这个也行啊,这是我们上次讲过一个配合吧,是不是有一个选项来着。是干什么来着?杠S是吧,杠杠D吧,杠SD,哎,这不也行吗?方法多样是不是你这些答案都可以再写上去,面试的时候你说我会了,我都会。我给你告我一个题,我告诉你好多种答案。
36:00
啊,那今天我们用for就可以做了,For怎么做呀?哎,In是不是一点点100度,然后呢,我们做一个计算,比方说用let法三加等I,然后I加加,然后再把散打出来。打开了吗?大家看这个思路理解吧。什么意思呀?这个let是可以做算术运算的,那么当然你这个I sum等于I,那这个some是什么?Some没有初始,我们最好前面初始化一下,这样的话你头脑清晰,给他这个初始是零。然后I也可以给它初始值,I值是初值值,当然I不用初始值,因为这本身就是一到100嘛,是吧,所以呢,上等于A加等A,上等于A加等A,那这说的什么?就是上等于A呃,加分米,哎,那么就是不断的把A的值往里累加累加,累加累加完了以后呢,这个A加完了还得往上涨呢啊,当然这个时加不用涨,因为我们这儿本身就有那个一到四加的功能,所以这上面就有,上面就有不用加,因为这个上面本身就是在不断往上找,所以这个可以不用加了也可以的。
37:20
哎,这样的话我们就算出来。啊,一加二加三加到100,所以我们目前来讲呢,这个计算是不是很多方法啊,我这有没有那个。有没有一个答案呢?这有吧,这有啊,当然我们刚才还说过一些别的方法啊,这个方法呢,比方说这个这个方法。好,我们把这些方法都放在这啊,将来你们面试的时候呢啊,这些题目的答案你可给他显示一下,你说我这个命令太简单了,我就给你提供N多种方法。
38:12
都可以算。嗯。都可以。当然这里面我们设的是一加二加三加到100,那问题是人家面试有很多人说了,你给我算算基数,所有100以内的奇数之和,基数之和怎么算,哎,基数的话,实际上我们曾经有一个一点点100的什么啊,这不是打出来的技术对不对,所以我们实际上那那有了这个了,那我后循环是不是就轻松了啊,后循环哎,啊就把刚才那东西T就行了,就把这替换成点点。
39:00
这叫技术。看见没有,所有奇数职责。当然,技术之和如果不用for循环,用传以前的方法能实现吗?100以内的基数组合。那除了这种方法,我们刚才讲的那些命令。这个不都也行吗?这个命令他能做到吗?S seq s seq有没有这个奇数的写法啊?S seq有没有奇数的写法,实际上它这有,你看第一个数,最后一个数就是增量,所以呢,它也可以这么写,第一个数是一,最后一个数100,中间两个增量,看你看是不是实现了,所以我们用这个方法也是可以的。
40:06
啊,一样。是不是完全可以做到?啊。啊,当然我们前面讲的那些符号也都可以。啊画括号一点点100点点二,然后呢,这个是传给TR,用空格把它替换成替换成加号,然后传给DC。S没有S这个是吧,啊,这都是一样的,所以这个方法都是多样的啊多样的好了,这是咱们当然奇数会了,你偶数不也一个道理吗。
41:18
是不是偶数的话呢,无非就是从二开始呗,二开始不就是偶数了吗?是吧,200多在面试这些题目对大家来讲是不是。简单了,嗯,那或循环,咱们现在那面试的时候呢,还会经常出一些这样的题目,就是说让你计算,就是让你创建十个账号,分别呢,叫U1U2UR3,一直到U10,然后每个账号呢,给他随机口令。这是经常出的题,那这种题目怎么算,怎么怎么写呀,然我们写一个创建用户的一个脚本啊,我们用或循环来实现,那我们要循环十遍,刚才说了就可以用in啊,画括号点点十是吧,然后这我们要创建用户user and Dollar user Dollar a,这是不是就是从一一直到十了,那创建完以后还有个随机口令呢。
42:30
随机口令咋写呀?随机口令,随机口令呢,我们可以附到一个变量里,这个变量来自于随机口令,随机口令我们讲过怎么生成随机口令啊,你可以用那个什么啊,然后把它的随机字符删掉,那些所谓的不可见字符,比方说我们就留下那个,留下阿拉法数字吧,阿拉法number,这是不是就留下数字和字母了啊,当然你要是想要别的符号也可以再加啊,然后这个这个留下这些符号以后,剩下的我们再取它的,呃,你想要几个就要几个,比方说我们要前12个。
43:25
是不是这是不是就是随机的密码了,把这个东西呢,给它反向代号引起来,或者到了小括号也行啊,存取以后呢,我们现在就可以把这个东西改了口令了,改口令怎么改啊啊,我们可以Dollar pass,用S就pass wds tdin后面跟上user。Dollar。是吧,哎,这个就不用写了。
44:02
哎,创建完以后,这个改密码成功不成功我就不想提示了啊,这样改完以后用户就有了,当然我们是不是应该把它记录下来,要不记录你密码你也不知道啊,所以我们就把user Dollar I和密码给他追加到一个文件里,比方说贝塔下的user。啊u.log log吧,这样就行了吧,然后当然你也可以把它再打印一下,说什么用户账号创建成功,User user Dollar I。然后就创建成功了。对吧,这不就OK了吗?这是不是就是十十个账号密码也说好了。
45:01
啊,这个面试题也经常问啊。啊,这多了一个。一是吧,这121了,这个啊啊,这个密码太长了啊,幸亏有同学发现了,好,那现在咱们来看都。是不是很开心的感觉啊,那看看咱们里面的用户账号有了吗?怎么样,用户有了,那真的有了吗?真的有?是不是很简单啊啊,100个账号不也瞬间的事儿吗?对不对,所以会了循环以后你是不是就很开心。很方便了,但是这个号不想要了,又删了,开始。那咋删呀啊,那就是还是这么玩呗,啊杜啊user there加加木也删了,然后A行了,这就删了,瞬间删了,这个删的很快啊,你看正好没了。
46:04
是不是啊?啊,这就是账户的创建删除,所以这个脚本呢,将来这个是现成的脚本啊,你们将来可以用了,稍微改改就可以用,面试题又有答案了是吧?面试题啊,我看我这里面有没有这个面试题的说明。这里面没有,那我就把它写到这里面来。啊,下面这些全是他的各种案例啊,大家抽空可以看一下啊,这个是创建批量创建用户。
47:14
用户和随机啊,那这边呢,还有一个叫九九乘法表,这个九九乘法表,大家想一想九九乘法表是什么样子呀,九九乘法表。这个就是九九乘法表啊,这个乘法表大家想想这个循环要想实现的话,这个循环我们循环循环几次呀。
48:01
这个九九乘法表,这个稍微要复杂一点,我们刚才的循环实际上很简单,只有一层循环,但是实际上在这里面我们这样算的话,它的循环是两层循环,一层循环负责打一行一行的,又要打九行,是不是九行就循环九次,然后呢,每一行里面是不是一个一个的小公式凑起来是不是也得打,打若干次,循环多少次,对不对?啊,那现在就问题来了,我们要循环两个,第一个循环负责打航,第二个循环是负责打当前行里的列,是不是行固定的九行,九行,九行第一个行,第二行,第三行,一直到九行就行的循环几次行就循环一到九次不就完了。
49:07
但是列就有多麻烦了,列每列循环的次数不一样吗?那么发现列的循环次数和谁有关?第一行循环列是一次。第二行循环两次,第三行循环三次,第九行循环九次,那换句话说,列循环几次是不是和行有关?由行是第N行,这个列是不是就是循环一到N行是不是,哎。所以大家现在就明白了,那接着具体每个公式里面,每个公式里面第一个数字是什么,第一个数字不就是行号吗?呃,这个第一个数字是列号啊,列号,大家想你看这是不是列号,列号,而第二个数字是什么,第二数字是不是固定的是行号啊,那第三个数字时他算出来不就算出来了。
50:05
所以呢,九九乘法表是不是很easy的打出来了,怎么做呀,写一个九乘九。用for写咋写啊,错哎,几个一到九,这个I呢,就是行号,那接着每一行里面要循环列的次数,是不是要再循环,最后用勾吧,这个循环几次呀,从一到哪到A,但是你能这么写吗。能这么写吗?到了。能这么写吗?看看啊,比方说A等于十啊这个,然后我们现在去打印一下,一点点到是吧,行吗。
51:11
那真的不行,真的不行,因为他没展开听了吧,所以我们这样写还真不行,那这样写不行,那我们就换一个姿势吧,换个啥姿势呢?哎嘛,这不也能生成数字列表对不对啊,这命令嘛,命令被命令嵌套是不是就是用划括号,哎,这个反代号是吧?啊,然后接着里面写什么。里面是不是就开始打这个公式了,那打公式怎么打呀,开口啊,当然我们打的时候每一列就现在是打一是第一列,第一列第二列,第三列,他们列和列之间换行吗。列和列之间不换行是吧?不换行,那我们,所以我们就得把那个说清楚,不换行,不换行,怎么不换行,有一个不换行的写法,就是斜杠C。
52:09
不换行,然后前面呢,就写公式嘛,那前面按照刚才不是说的是应该是前面是列啊,按照刚才查查这个查的结果呢,就是前面是列。第一个是列,第二个是行啊,那列的话呢,就是列是来自于勾嘛,所以就是啊勾。乘,哎,这个乘的话,这两个呢,混在一起了,G和X分不清了,所以我们要用。发号扣钱,或者你为了以后避免出现问题,你就干脆全家画括号。它就没事了嘛,对吧,然后等号,等号算出来的结果是什么?算出的结果来自于不就是勾乘I吗?对吧,那这个构成要算的话怎么算呀?哎,中国号怎么这么写吗?然后就是呃勾乘。
53:08
勾星是不是就算算出来了啊,当然这个应该是,呃,这样写,这就求出来了,求出来以后,当然这个是不换行,但是我们做完打完整行以后要换行吧,所以这个地方加个补括号。看懂了吗?因为你的一个公式一共是不放行啊,而且呢,这个拨放行中间是不是还得空格隔开啊,你不空格隔开,它后面又连上一块。哎,那我们来看一下能不能出来这个效果呀,哪出了错误,第12行,12行在哪呢?这个地方啊,少了个印,少了个印啊,啊走出来了,看到没,但是有问题,不美观,对不齐呀,这个对不齐原因是因为我们人为加了个空格组织的,那么怎么就让它对齐了,哎,Table键有对齐功能,加个table就行。
54:15
咋样?是不是觉得很简单呀,九九乘法表是不是没什么难的,九九乘法表啊,你看我这之前写过一个九九乘法表。应该这个跟这个是一样的,应该是一样的。九九乘200啊。那下面还有一些这个,这个有些是生产中的案例啊,有些呢是面试题。这个大家下来你可以自己看一看啊,啊,你像这个写法是将。
55:06
将什么呢?将这个目录下的所有文件的后缀变成BAT后缀啊,什么意思啊,就是说我们有一个文件夹,这个文件夹里面有好多文件,比方说有的叫test,呃,有的叫这个B点,呃,这个C,呃,B点这个这个log啊,有的叫什么C点,这个这个H点面,我们现在通通都把它改成什么呢?改成BC后缀就是a.test给它。改为a.BP然后b.log改成B点,那这样吧,我们改成什么呢?就是改成原来的后缀,还留着在后面补上一个,补上一个BK,那这样做的话实际上就意义不大了,因为我们有更简单的方法,比方说哎,就这样吧,那现在是这样的啊,我这有这么多文件,我想在每个文件的后面都追加一个BK,这个怎么做?也就是说a.test变成a.test BK啊,b.log变成b.log的BK,这个大家想想怎么做,c.H上面变成c.H上面的B怎么做呀?假设里面有1000个文件,现在让你做怎么做啊?哎,我们前面曾经。
56:41
讲过一个命令,它可以实现批量改文件,命令叫什来着?是不内,那他的更改方法是什么来着?星改成星点BK允许这么写吗?
57:03
他有这个写法吗?这样写不行吧,你看这样写不行啊,这样写不行。这个rename呢,它前面呢,要写转换规则,写规则呢,但是你不能写那个心那样的写法啊,那它这个有表达式。这个表达式前面是表达式要替换着什么,但是我们现在每个文件名有没有特别明显的这个特征啊。你看它这个地方,这要写它的表达式,这个表达式呢,你写成什么形式啊,你看它这个要求你必须要有一定的啊格式,你这样才能写它不你要不没有特定的格式,他没法写,它后面这个是可以支持中的表达,就是通配符的,但是前面不写。
58:12
哎,前面不行,所以呢,像这种情况下,那我们要想把它们改了,那我们怎么办。那你就可以用或循环。或循环啊,比方说我们写个这样in星星是不是就是所有文件,然后改的时候怎么改呢?我改一个一个改啊,比方说我们改成用MV来改。MV。哎,然后。那改的时候改成啥呢?那就是fair.dk不就行了吗?这是不是就可以了,那么用这种方式是不是一个一个的给他改了,对不对,这个改了,那我全给他改了啊,当然这个MV这有个度吧度。
59:07
少了一个CE啊,大家看是不是就都改了。这不就轻松的实现了一个批量改文件,值吗?是吧?那以前有同学生产中遇到这种需求了,他不知道咋改,哎,当然他有可能是另外一个需求,就是什么什么需求呢?他是想把每一个文件原来的后缀不要了,比方说我原来的文件后缀是test,我现在想把这个a.test改成a.PC这是另外一种逻辑了,那这个东西我怎么把这个文件的?后缀换成另外一个后缀呀。就是前面这个留下后面的后缀不要了。
60:08
那实际上刚才我们已经讲过一个取后缀的方法,是不是用grape就可以,哎,那就是取它的后缀嘛,那这个取后缀我们刚才说过有一个取后缀的方法是eo,用什么grape。刚才我们怎么写的来着,Eo哎,斜杠点,然后我们点心,当然这中间我们就是所有不是点的其他符号这样写,这样写是不是就是把这个后缀就取出来了啊,后缀取出来了,那这是不是点的其他符号。啊。
61:01
斜杠啊,一个以上加号,少了一个加号。是吧,它不就出来了吗?啊,当然前面这个点呢,可以不写,就直接要它的后缀对不对,这不就取出它后缀了吗。当然,你要是不要那个后缀,光要前面的文件名怎么取的杠V。岗位行吗?啊,杠位的意思是啥意思呀,不是那个意思啊,要我现在要光要文件名,因为我们文件名留下来后缀是不要的。对不对,那这个这个怎么怎么做呀。啊,怎么要它的文件名,那实际上还是这个表达式匹配吗?这张牌匹配那就是什么匹配啊哦,就是同行首一直要从行手一直要,要什么只要不是点。
62:05
点星最后这个是一直到最后一个,那点是这个最它前面有可能出现点,后面这个呢,最后这个不是点啊,那如果是这样写。这样行不行?不是点,但是不是点的话,你看这样的话,他最后把那整个文件都匹配出来了,就这不行啊。光有前缀,不要后缀。那这个不是点的其他符号。这个怎么表示?
63:07
那我们要把这个文件的后前缀取出来,后缀不要,嗯,当然刚才好像有一个更简很简单的巧妙的方法。把这个东西留下来,不要文件名啊,不要文件后缀,那就是正过来反过来是吧啊。哎,那这个是不要点,刚才有同学说了,我们这个是不是点以上的其他符号,那但是你这样匹配的话呢,匹配到A可以,但是呢,我们可能会出现这种问题啊,比方说b.C点。
64:03
这是不就有问题了?对吧。那所以我们刚才曾经用一个正过来反过来的方法。啊,当然这个set命令还没学啊,因为set命令没学,所以这块呢,我们先暂时用一个比较笨的方法吧,啊什么方法呢,21V,然后怎么取啊,用点儿作为风格符。那分格符取取多少个呀。取第一列,取第一列,那那就是那那就是那我要的是CBABC,不是用不是要test啊。所以这个后缀怎么把这个ABC取出来,ABC取出来。
65:07
ABC test不要了。ABC取出来不要后面的。那这个用搜索替代是比较容易解决的,但是我们现在还没学搜索替代啊,没有学搜索替代,所以现在没有办法很好的去实现这个取前面的这一部分啊来实现。那我们现在用这种方法,Rev顶多能取出它的后缀来取出后面的东西,因为你不知道后面有几个。是不是啊,当然它这个地方支持不支持这个写法,比方说我们,呃,这个二以后的东西能不能这样写,二以后的东西后面必须要写上一个结尾的符号吧,啊,比如说二到四就可以,诶你看看这少了一个点是吧。
66:23
二到四,那我们二以后的都要,诶这可以。这是不是就可以了,那这个我们正过来反过来不就行了吗?那再反过来是不是终于就得到了。所以这种写法也行啊,当然这种写法真的是有点笨啊,不过呢,至少我们有一种方法了啊,用这种方法也可以。那我们可以用这种方法把这个前缀呢,给它,用这种方式给它取出来。哎,取出来,取出来以后呢,反代尔号引起来这样也行。
67:03
啊,这个方法因为我没学啊,这个方法还没学,所以这块写的话不合适,我把它。啊,这样来写。啊,这样的话呢,我们现在把这个文件前缀就取出来了,那好,那我们来试一试啊这个代码啊,那现在呢,是这样的,我们这有这样的一些文件啊,这样的一些文件,这些文件呢,我们计划是把它的文件的呃后缀。从原来的内容变成BK,当然我们这里面已经有BK的了,我们把这些BK的文件先删了。好,那我们接看,他说d.log c.p.F啊d.a.L好,那现在有了这样的文件,那现在我们把刚才说的那个脚本来写一下啊,叫script,然后呢,我们想实现一个批量改名。
68:09
改文件名啊,怎么写呢,这样写啊这样写,那这个呢,就是我们定义的工作目录。然后目录呢,是在这个目录下,然后进到这个目录里,然后fair尔星星的时候呢,我们取它的文件的前缀,用这种方式是不是就去出它的前缀了,取出它的前缀了以后,然后改名,改名的时候这个菲尔式文件名,我们把文件名改成前缀,后面加BK不就行了,这不就行了,那我们跑一下这个脚本走,看看改了没改了吧,这就行了啊,这个是以前有个同学上了班以后啊。
69:00
他在生产中遇到这种需求了,他不会怎么弄,就问问题了,那这个就可以做了,非常简单。啊是吧,呃,你用的是什么点心斜杠点。点心斜杠点,对你可以加个点啊,那我们ABC.bk是吧,比方说我们用这种方式用grape-eo啊,然后我们后面跟上一个点心,点心呢是所有的字母串,然后再斜杠点。当然这个就把点加上啊,加一点加一点加一点也行,这种方式也可以,那就是我们把点就是我们取的,不是说这个前缀,是把这个点也取出来了,这点垫上,垫在垫上也无所谓啊,这也可以,所以这种方式也行啊,所以我们刚才写的这个脚本还可以再换成另外一种格式,那就是什么格式呢?就是。
70:07
啊,那就是这把它改成刚才提到的gra啊eo,然后这个是后面跟上一个啊点心斜杠点对吧,当然这时候呢,这个点就不用加了,是不是这个点就不用加了,这样是不是就可以啊,哎,那这样也行,那我们把这个呢给它去掉,这样也可以啊,应该是上面那个是吧。上面那个啊,那我们来试试啊,啊,那我再把之前的文件全给它删了,删了以后a.test b.PDF啊c.HM好,那我们跑一下刚才那脚本,看看能不能跑起来。
71:06
哎,是不是也可以啊,哎,这样也行,所以我们用这个语法也可以,不过这个语法要配合这个啊,这个不能再点了。所以这两个呢,得配合一块用啊,这个代码就得适当的改一改了,呃,那这样的话呢,我们这个是两种语法了。这是一种,这是一种法啊,这个是另一种语法。啊,这两种语法啊,这些语法赛的完面没学啊,等我们学完S以后呢,你就能看懂了啊,那这就是我们给大家介绍的批量的改文件名,改文件名。
72:02
那下面这个呢,你们下来可以思考思考,这个题也是37期的一个同学的面试题,这个面试题我觉得还是挺考察的,我在这就不做了,因为答案都有,你们下来可以先看这个题目的要求,它的题目要求呢,就是有一个年月日日期的一个文件,然后他每天都有自己的日件文件放在这个文件夹里面,这个文件夹的名称就是年月日日期。现在呢,他要求是把这个年月日这个文件给他改到一个新的目录里,改成什么,改成这个目录,就是年月日后面加一个子文件夹,是日期,听了吧,就变成这个样子,这个是37期的一个面试期,这个同学它还是有一定的呃基础的啊,这个同学我记得是来的时候,呃年龄是二十七八岁吧,他之前做过一些运维工作,有一点基础了,有一点基础。他面试的时候人家问这个题他做不出来,不过他后来也工资也面试找一份工作好像15K。
73:02
所以如果你要做出来这道题是不是有可能就超过他15K的工资,他没做出来反正啊,所以这个下来你们可以试试啊,这个题目我就留成作业了,下面这些练习你们都可以试试啊。那至于for循环的另外一种语法,咱们下次再说吧,下次再说好了,今天的重点内容是什么?还是脚本编程是吧?今天我们重点学习了一些这个,比方说条件测试这些语句,这个很重要啊,比方说这个if啊,包括数值的比较啊,字符串的判断呀,啊,包括还有这个线的环境设置,包括流程的控制,If case,包括我们刚才讲的破循环是吧?那这部分内容呢,大家下来好好消化消化,当然也别着急啊,这部分内容是实在不是一天两天能学的这么好的,需要慢慢练,所以大家下来把我这段脚本都写成案例了啊,你们下来照着抄照着抄,然后抄上几遍,慢慢就熟了,知道吧,我这案例还很多很多还不少,接下来大家可以来试一试啊。
74:15
好了,同学们都献花了,那我们就下课吧,今天内容上到这啊,大家先来。
我来说两句