00:00
大家好,欢迎大家继续收看上硅谷的运算课程,我是沈超老师。这节课呢,我们先不要讲这个运算符,我们再先讲一下d declare这个命令,看各位它的作用,D它是用来声明变量类型的。各位,我们之前一直在说,我说我们的Linux下,或者说she中,我们所有所有的变量默认都是字符串型。但是如果只是字符串型这个事儿,很多事都做不了,比如说我要进行数值运算,我是不是必须要把它变成整数,这个数值型整型或者浮点型,然后是不是才可以进行运算,那如果你就是这个字符串型,那它算不了啊,对吧,比如说我们说我们前面都是写的都是这样的方式啊,那我们比如说A等于一。B等于二,那C等于A到A。Dollar a加到B,那这个时候我们输出X Dollar c,你会发现它的值不是三,而是一和二的两个字符串,中间还有个加号,它把这个加号也认为是字符串。
01:09
哎,这就是所谓的字符型啊,这个很尴尬啊,它没法进行运算啊,那所以我们说啊,首先运算其实前提就是要把它转成数值型,而我们说在其他语言当中都不是这样。其他语言是你定义变量的时候,你先确定这个变量是什么类型,确定好了以后是是数值型,它就数值直接相加就行,但是我们事儿他是为了简化,其实他这么做,做这么别扭的东西,其实就是为了降低事儿的难度。他就说我,你也别给我定义你的类型,你就把它全部当成自符串,如果你要进行特殊的运算,你再通过低可量低可低可雷尔命令,把它声明成其他数据类型就行。而且我说我们这可雷尔其实并不支持太完整的类型,我们常见类型它识别就这些数组型整形,然后还能生成成指数变量,就这些。
02:02
哎,各位他不是说我少写了,他可能它总共也就是就识别这些,比如说像什么日期型不尔行,那这样看起来事二当中默认都是不支持的。那所以还是这句话,他这样做的目的其实都是为了干嘛,降低我们的生儿难度,OK,那只不过让初学的时候觉得极其别扭,说心里话,我们初学的时候我也觉得很别扭啊,很别扭,那这个时候我们就看一下这个迪克列尔。他是这样的。如果我要进行这个这个如果你默认是字符串,如果需要把它改成其他的属性,使用减号给它复制。哎,比如说你要想把它变成这个数值小,用减I来赋值,但你如果你想把这个数值属性去掉,变成加,哎,这个很二啊,就减号是设定变量,加号是取消变变量和我们一般的习惯不一样,一般习惯是不是加号是设定变量,减号是取消变量,这个这个命令是挺怪的啊好了,那我们看看,那我们来看看它的这个,那我们前面这两个看这样一赋值,它不就变成一加二了吗?不能不正正确运行,那要想正确运行怎么办啊,一可尔简I把强制把C变量变成数值型。
03:17
哎,其实理论上也应该把前面的这个A和B也变成数值形式全加,但是是这个还好,就是你只用把最后的和强制变成数值九,他就知道这个东西是要相加了,然后呢,他就会正确运算了,OK啊,要不然你看这个二二多二,那我们试试啊,第一可雷尔,然后赋值该给C变量赋值该它的值是到了A。加。到了B。那这个时候艾克到了C,好了,总算是正常了,对吧,它就可以正常运算了,看到了这是把它变成竖直型,那我们说这是数学运算的一种方法,各对,其实我们整个这个章节是在讲我们的数学运算的方法,那这只是其中的一个,但是我们并不太习惯这个,我们下节课来讲我们真正习惯或者推荐大家使用的符号,其实我们前面见过就是刀了双小括号,对吧,我们这节课呢,是讲一下迪declare尔这个命令,或者说它如何生命变量啊,我们来看一下,好这个这就是他的第一种数据运算的方法啊,如果愿意用也行啊,再一个还有一种变量类型叫做数据。
04:27
各位,什么叫数组?超哥在这里其实也写了什么数组,其实它的作用也是在里面保存值的。它和变量的区别在于什么?变量和数组我说都是用来保存数据的,区别在于变量只能保存一个值,而数组通过特定的方法可以保存多个值,可以保存相同类型的多个值。你可以这样理解啊,你把变量理解成什么?一个小办公室。这个小办公室里面只能放一张办公桌,所以里面只能保存一个人,一个人在里面办公,这就是变量,那这个办公室的名字就是变量名,比如说我前面定义了C等于一啊,不是A等于一,那这就是变量名,这是它的变量值,一个变量里面只能给一个值。
05:13
而数组,你可以这样理解,它是一个大办公室,里面有好几个办公桌。然后呢,我可以我的办公室名是变量名,比如说是数组名,比如说我这个变,这个数组名叫内。然后呢,我允许你干嘛在里面干嘛,定义办公桌,办公桌零。它的值是一假设啊,或者是AA。办公桌一上面放的值是B。办公桌二上面放的值是C,它允许在一个数组当中负多个值,然后每个数组用它的这个办公号。那在办公室叫办公桌号,在我们这里叫下标,数组的下标来给这个直女什么意思啊,我们举个例子啊,你看啊。
06:00
如果只是个简单的这个变量赋值,比如说我们这个就是test等于123,那它的值就是123了。对吧,那我们可以这样看,第一。然后呢,我们给它附数组属性。杠A,把这个变量申明成数组行杠A,然后呢,我们定义个数组,前面是变量啊,这个是变量只能负一个值,我们定一个数组,比如说我定义一个内幕数据,然后用中括号写入下标,这就是我说的办公桌面。然后比如说办公桌名,第一个办公桌做沈超老师,诶,那我们第二个办公桌呢,来看啊各位标准方法赋值,其实应该是超哥在这里写的这个命令,这是标准给数组赋值的格式,但是啊,这个命名格式太特殊了,看变量名后面加了个中括号,后面写数字。咱们从来没有见过这样的变量赋值吧,所以这种情况下系统就知道了,说你只要这个名字是这样写的,哪怕不写前面这个低可量尔值,系统也知道你仅仅的是个数组,所以像我们文档上这样写。
07:12
诶,这样也是可以的,还我说给内幕零,第一个办公桌做这个高大威猛帅气的人,也就是超哥自己,第二个办公桌呢,做这个李梅老师,呃,我没有写错啊,就是头发增亮,其实他那个头你们如果见了真人,看起来就跟没头发也没什么区别啊。这三个人呢,这三个办公桌呢,就可以坐我们这个童刚老师,童刚老师的这个眼睛啊,眯起来之后比超哥的还小,我见童高老师之前,其实我一度很自卑啊,哎呀,这个眼睛怎么这么小啊,我一度想去拉一个双眼皮,后来发现,哎呀,跟童阳老师比,我还是很有自信的,所以这样的话,其实他允许你这样来复制。那这样的话是不是就不用这么麻烦对吧,那我们试试啊,那么也。等于同高,呃,这个里面李明老师,然后内二。
08:02
第二这三个办公桌,哎,办公桌号是从零开始算的,对吧,那么是同刚老师好,那这个就是它的这个值的负值了,那调用呢,调用的时候这个值是错的,如果这样说他只能输出这个当中的第一个办公桌的人,那他需要用这种格式,很别扭啊。Dollar大括号后面加数组中括号里面写星同位符,代表所有的办公桌,这会列出数组下所有的内容。好,我们试试啊。AO do大括号数组名是内中括号里面输出所有的下标了这个值,看这个里面,这一个数组中可以保存多个变量。好,这其实就是数组的基本用法啊各位,但是我们学员我说心里话,我们原先这个上大学。虽然超哥不是计算机专业。但是理工科都会要学C,那学C语言的时候就是两个难点,一个就是指针。
09:02
指针来回的飘,家伙,大伙就晕了。第二个就是数据,数组一出来,好了,彻底死了,那我们的学员想不通在哪啊,他我说我说啊,你其实就可以把变量和数组当成一样的,就是用来保存数据,区别就是变量中只能保存一个数据,而数组中通过下标可以来保存多个数据。那学员就很懵逼啊,那我干嘛干嘛,我干嘛要用数组啊?既然反正都是他还是要通过下标来区分,那我干脆就申请成内一内二内三多好,就用变量来存多好。各位。原因是这样的。我们所有的其他语言当度数组,它都是有很多内嵌函数的,它会明显的降低你编写程序的难度,比如说啊,我们说一个最典型的这个这个这个数组的练习啊,什么东西就是冒泡算法啥意思,我有100个随机数30啊,然后这个790。
10:02
然后什么多少多少随机数干嘛,我五十五十九随机100个数放在那。我要求你们干嘛,把这个数100个数按照大小顺序从大到小派。各位常见吗?我们这个Excel表格,不论Excel表格还是什么,我们是不是都可以,包括Windows自己是不是都可以按大小来排,文件大小来排序常见功能吗?好,你来给我写这个东西。各位,这是一个基本的算法练习,它的理论是什么?其实原原原理上就是把两两个数相比,然后哪个大排前面,然后再和他比,然后这个大的再和大的比,小的再和小的比,这样来。但是啊,这个东西如果算法你写的不好,它有可能是什么就会变成什么,每个数如果算法写的不对,第一个数是不是跟第二个数比,比完他要还和第三个数比,比完再和第四个数比,再比第五个100个数,每个数比140,加起来就是14000。
11:01
这样的话算法起来就很二,所以冒号算法是有经简算法,写程序的时候一般都要来做这个算法,那我说如果你自己写。我说第一,你算法是不是该自己考量,第二,写完的程序是不是很复杂,那为什么要求你们用数据,原因?数组中有自动写好的排序函数。如果你要是保存在变量里,你就得自己来写这个算法,可能几十行才能实现功能,如果你算法写了二,你这个东西有可能算1万次,还会拖慢你的系统性能。而是函在数组中呢,直接就拥有这样的排序函数,你只需要把这些数都导在数组当中,然后调用函数,它自动就排序了。那我问你,那是不是用数组来保存,做这样的算法是不是要方便?还有一个典型的例子啊,就是什么抽奖。比如说今天我们要开年会了,我们每个人都领了一个座位号,也是这样的随机数。
12:01
然后呢,我再在这100个数里面随机抽出来两个或者三个。诶各位,这要是自己来写,其实也挺麻烦的,哎,而这个东西自己写起来,算法有时候可能算不清楚,有可能你会始终把一个人都算不进去,或者几个人算不进去,或者始终就抽这么几个人,写起来也很不方便,那这时候怎么办?把它直接调导入数组,然后呢,调用数组的这种随机,这个随机抽取的这个函数,一条命令,其实导进去第二条命令调用它就出来了。那我问你啊,那是不是用数组远比写在变量当中要方便对吧?这也是为什么我们说所有其他语言当中,数组都是一个非常常见的功能,而且需要大范围应用。但是你听清楚。在事儿中。数组可用处极小的原因,12、准备了数组,也可以把这些数都导到导在数组当中都导进来,但是没有准备这些内线函数。
13:05
我们说啊,12几乎没有内线函数,原因就是12是用来写非常简单的功能,我们认为或者是开发12语言的人,他就认为我不可能拿12来写这种算法类的东西,他就是为了帮助这个管理员干嘛来完成工作的,那写这种算法,这其实都是要写外部程序,或者写这个客户端程序,拿PHP写去,拿Python写,何必拿事写,所以。是按数组这些功能都有,因为我们这是一个完整的语言,但是没有这些函数,如果你要用好,对不起自己去选算法,那这样就导致数组在扇儿中的作用就大幅度下降。包括函数的作用也大幅度下降啊,为啥其他语言你们说了,我说了这些功能是不是都是事先向后的函数,我就问你,你把函数名背下来。然后呢,把它的这个就像我们背命令一样,把里边的参数都备好,然后你需要排序的时候,你直接调用函数来排方便,还是你自己写算法方便。
14:08
所以啊,我们不要说其他的语言,我前面一直说,我说我们运维课前期都是背,有些人说那克老师我背可能还不行,编程是不是不用背,我说你想多了。我们背的都是几百个命令,编程课他要背几百个函数,而我们说在12中没有这些内接函数。没有那些函数就代表如果你要用这些函数,你就得自己写。那这个时候我们就说Sha尔其实不方便,所以说Sha尔他根本目的就不是用来写这些复杂的算法呀,这样的东西,它就是为了这个降低管理员的难度,所以数组对事几乎没有作用,函数也没有,因为什么事没有,那些函数要需要就得自己写,那这个事儿就是写函数也行,不写我写成一个单程单独的程序是不是也行,对吧?所以啊,大家要理解一下。
15:01
数组这个东西,其实对其他所有语言来讲,可能都是需要讲好多天的。要举大量的例子,这些包括数组内的函数都是要背的。对于我们来讲,几分钟了解一下是什么就行,哎,各位听明白了啊,这个知道是什么就行好了,其次。我们前面说过,如果把一个变量变成环境变量使用是不是XEXP命令对吧,其实啊,我跟你讲啊,如果我们低可量查一下。我们这可乐啊。杠P查询一下,你会发现我们说前面这些是不是都是环境变量。对吧,这些是不是都是啊,这里还有数组,还有只读了,那这些是不是都是环境变量,其实它都是通过except这个这这个低可尔杠X来失明的,这些环节们量全部都是,换句话说。Expect命令这呢?仅仅只是低declare的一个简易写法而已,就算用PE命令把命令这个变量变成环境变量,其实最终还是通过这个方法把它变成了环境变量。
16:08
OK,那也就说看啊,我们expect啊,先先看一下刚刚普通这个这个test只是一个普通变量,对吧,那我们expect xport X xport啊,这个是X xport把test变量赋值成环境变量,这个时候我们第一可来看一下杠P是查询的意思,其实它还是通过第可来杠X命令把这个变量变成了二变量,只不过。敲这个命令比较麻烦,一般人都记不住,抄开也记不住,要不是讲课讲到这我也记不住,那没有也炮命令好记,所以这两个命令的作用是一致,最终把变量变成环境变量,其实还是利用的是D-X选项啊啊再一个啊,小心D后面如果加杠P。它的作用就是查询,那我们刚刚是不是用它来查询了所有的系统下的变量,对吧,包括这里能看到数组,包括我们前面这个C是字符串都是能看到,对吧。
17:10
好,接下来还有一种类型,这种类型叫只读型。这个二。这个只读型一旦改了。你会发现一件事,这个变量不能改,值也不能删,甚至还不能用加R选项把这个只读属性去掉,这个只读属性就这个只读变量就彻底不能碰了。哎,这个其实有用吗?有可能用来保存,保证里面的值不能改,把电量变成常量。但是用起来我其实感觉不痛快,我们试试啊,你看啊,我们第一。把T的变量赋予成指读,这个时候我们查一下来,我们可以看到T的变量在刚刚的这个。
18:00
这个这个X值之上,环境变量之上多出了一个只读属性,这个时候你看啊,我给它改个值456。345报错值是变量,是只读的,不能改,然后呢,On set删一下。开的也会报错,不允许不允许删除,查查一下看,直径没有变,也没有被删,他就不许碰了。甚至有人说,那我把指读属性去掉不就完了吗?看着刚刚是不是用的这个命令去掉,要去掉的话是加R好了,也报错了,只读属性不取家,不许取消,让我们查一下,这哥们儿还在这。哎,换句话说,请了个结。一旦设计完这个变量就不许碰,连root用户也不能碰。好在。这个变量是用命令的,是零时生效,重启就会消失。但是如果你真要把这玩意儿写在了一个环境变量配置文件里,这家伙一旦永久生效,好了,恭喜你,这个变量你就不能碰了,那为什么有这个属性啊,我们可以看到我们系统中其实是有一部分重要的函数,它是比如说我们的被试版本,它都是禁止你来做这个修改的,看到了其实它有这样类似的这样的东西啊,你当前登录用户的ID号就是零。
19:20
所以啊,这个也有特殊作用,但是并不推荐用户自己来设计,这是只读属性。知道就行,可以啊,那查询变量属性即可,来杠P后面加变量名,就查单一的变量,如果查所有就像我这样即可,来杠P回车就可以了,查询所有的电量啊,那如果是取消属性呢,用加属性就可以取消啊,取消环境变量属性,当然这个R属性是取不掉了,好,各位。这里呢,我们这节课呢,讲了一下低可列命令,它的作用是用来声明或者修改我的变量的这个类型的,因为Sha share尔中所有变量类型都是字符串型。
20:02
那其实说了这么多啊,其实我们说我们事儿其实支持的并不完整,特殊类型,这个它是并不识别的,OK,那它其实能识别就这些类型,那但是这个事儿啊,我就说啊,当然如果你要愿意,可以慢一下慢一下。我们可以发现D雷尔是一个内置命令,内线命令,看搜完之后和CD是在一起的,这里对吧,那我们在里边搜一下,第C找这里我们就可以看到,它能识别的就是这些,前面两个都是数组。这个呢,它能识别命名成函数,哎,函数我们后面来讲好吧,然后呢,剩下的就是这些了,数值型,然后只读型,环境变量型,剩下的就是什么定义完,把它的变量名从大写变成小写,或者从小写变成大写的都是跟这个东西,OK,那它就能识别这些类型。包括这个函数在内就这些,所以啊事当中我就说它不是一个特别完善的程序,很多功能都不一定有,但是它最大的好处在于可以直接调用Linux的系统之内,所以我们绝大多数运维工程师自动化运维的程序里面,其实用的还是什,而不是可能更高级的Python之类的。
21:16
那只有什么事完成不了。我们可能才需要借助拍子或者这种更强大的语言,OK。好,各位讲这个啊,这节课听起来好像很懵逼啊,原因是这个可能是真正的核心编程,就编程的用教,前面还有点和系统相关,那它的作用是用来改变我们share当中变量的类型的,因为默认类型都是字符串型,其实这么多类型当中真正有效的还是就是数值运算变成数值型。让它数值运算就行,而其他的这些呢?包,尤其包括数组。这些数组是真的对其他语言是非常重要的东西,对事几乎没有意义,因为没有函数在。他没有这个准备好的函数,你写成数组页来自己来写算法,所以啊各位大家了解就行啊,主要还是知道就是这个,还有一个知道环境变量的问题,OK好了各位。
22:12
那这节课的内容就是这样,我们下节课再见。
我来说两句