00:00
接下来我们要介绍的呢,是Linux shell当中的运算符啊,其实我们知道既然现在是要把shell当成一门编程语言来学习啊,那作为编程语言总不能是定义了变量之后直接用变量就完了,肯定是需要做变量之间的计算的,所以我们必须能够搞清楚怎么样去做计算,这就涉及到了运算符的使用,前面我们也发现了啊,在Linux shell里边,如果说哎,比如说这里我们定义一个变量叫A,如果说我们定义的时候直接给它一个值叫一加二的话,首先我们知道这中间是不能有任何空格的,如果一旦空格,这肯定就是表示。未找到命令了啊,因为空格我们表示命令和后面参数之间的这样的一个间隔,所以接下来如果说我们都不空格,直接给它。设置值叫做一加二的话,那么当前。A的值并不会计算出三,它的值就叫做一加二啊,那所以我们知道你如果在这儿啊,直接就写一个一加二的话,那这当然也是没有用的啊,没有办法直接计算的,所以从这一点上来讲,是要比其他的编程语言确实还是要麻烦很多啊,很多编程语言如果有这样的一个解释解释器的话,特别是这种动态语言啊,解释型语言的话,你应该是直接一敲这样的表达式,它直接就给我们算出来了啊。
01:18
所以这也我们也可以看得出来,这个shell还是比较底层的,它并不是作为一门高级语言来进行设计的,那我们就会想到了,我现在就是想把这两个数做一个叠加,这怎么办呢?那你的默认情况是把它当成字符串了吧?诶,在link shell里边,它有一个专门的命令,就是进行计算。各种各样数值的表达式,做这样一个处理的这个命令叫做EXPR啊,那我们知道这其实就是expression表达式的前四个字母,那有了这个之后,EXPR,那我们就想到了后面,比方说我直接来一个一加二,但是我们会发现这样还是不行,这样它还是把它当成字符串了,那怎么办呢?
02:00
那就是要在加号两边空一格,哎,所以本质上来讲就是把一加号和二当成了EXPR这个命令啊,Expression命令的三个参数传进去了,哎,前面我们讲过参数,现在就自然就知道怎么回事了,所以现在一回车我们看。得到的就是一个三,这就是真正计算出了对应的结果。当然了啊,有加就有减,那如果说这里边我们来一个五减二。当然也是没有问题的,哎,得到了一个三,那假如说我们这里边来一个五乘以二呢,我们看这里边直接报语法错误。为什么呢?呃,因为我们知道星号在Linux命令里边其实是有特别的含义的啊,很多地方我们拿星来表示一个通配符啊,就表示这个所有的匹配,包括我们在脚本里边也可以用Dollar芯来表示当前所有的参数,那你当前直接使用它当乘号的话,呃,这个定义好像就有点重了,所以它直接报语法错误,那怎么办呢?做一个转义。
03:03
这里就叫五杠芯,然后二这样就可以得到了一个十,所以我们我们会发现啊,这种方式哇,这也太麻烦了吧,做一个简单的加减乘除运算都要这么繁琐哎,所以为了解决这个问题呢,在Linux里边就针对shell的运算啊,专门设计了一个更加简化的运算符,那就是。直接加上一个Dollar,然后呢,使用中括号把里边的运算式括起来,或者是使用双小括号把运算式括起来,这样的话就可以直接进行计算了。所以接下来我们如果按照上面的这种表示的话,我们可以写成什么呢?啊,我们直接可以写成一个Dollar符,然后里边五乘以二啊,当然了,如果说我们直接这么写的话,那它把这个得到的值十当成命令是没没办法调用的,我们可以E一下。诶,直接就可以得到十,当然了,这中间的对应的这个空格就可有可无,没关系了,只要放在这个Dollar中括号里边,或者放在Dollar双小括号里边。
04:13
得到的就相当于是我们的一个计算的表达式啊,那对应的值直接做计算就可以拿到结果了。啊,那平常呢,我们肯定不是直接这么做AO啊,是想把它赋一个值赋给A,哎,那我们就想到了这个,如果要付给A的话怎么办呢?哎,那很简单啊,直接就是A等于,然后后边加上我们这里的这种写法就可以了啊,那比方说我们这里边直接就呃来一个六加上八。然后在echo Dollar a可以看到它的值就变成了14,所以这种写法比起expression来讲啊,PR来讲就会简单很多,那假如说你前面使用了这个expression这种方式,想要再赋值给A的话,这个应该怎么写呢?哎,这个要注意啊,比方说我们这个写法是对的,先把这个复制下来,然后A能够直接。
05:06
就把它粘在这里吗?这当然不行,因为中间空格的话,这又表示执行命令了嘛,哎,那我们自然想到了,那是不是我加上一个引号呢。这样。Echo一下Dollar a,这也不对,加上引号的话就把它当成字符串了,那怎么样能把它当成一个真正执行的命令,然后得到的值再付给A呢?哎,这就。需要用到一个link shell的一个特殊的用法叫做命令替换,就是说我们需要把这个执行的命令替换成它的值,然后再做进一步的使用赋值给A,哎,那这个怎么做呢?那就是A其实跟前面这个做法有点像啊,跟前面这个Dollar小括号有点像,就直接加一个Dollar小括号,然后里边把对应的这个值。复制进来,我们把这个还是复制一下,里边这里删掉,然后复制EXPRESSION5乘以二,这样的话再echo一下A。
06:07
我们可以看到就变成了十啊,所以这种用法确实很麻烦啊。呃,当然了,除了这种命令替换的方式,还有另外一种替换方式是不用Dollar符,用这个反引号啊,那这样直接去写的话也是对的。Dollar a啊,这个也是可以的啊,那如果我们没看清楚的话,可以把这个做一个更改,比方说改成四,然后再echo一下,这个就改成20了,这两种方法都叫做命令替换,就是把一个命令执行的结果替换过来,再进行操作,进行复制,但是我们就会发现这个确实是很麻烦,一般情况都不用这个expression的方式啊,一般我们都是用最推荐的方式,当然就是直接Dollar加中括号就可以了。尽管看起来这个简单了很多,但其实还是比很多别的编程语言啊,还是要麻烦很多的,绝大多数编程语言不会这么麻烦,应该是直接加减乘除上来做计算就完了,这也是shell不太不太方便的一个地方啊,也是它的特点,我们可以看到它确实是更加底层。
07:06
好,这里我们可以看一个具体的案例,具体的实例,比方说我们这里需要去计算二加上三的和再乘以四的值,哎,那怎么算呢?然后把它赋给一个变量,比方说叫S,呃,那或者说我我们在这里直接就把这个S定义出来,最简单的方式当然就是Dollar后边一个中括号,然后里边你要算计算这个二加三的话。因为加法的优先级不如乘法高嘛,所以我们要加一个小括号,然后后边乘以四,哎,这样就完了,Eo do s。我们可以看到它的值是20,整体来讲还是比较简单的啊,关键就是要加上这个Dollar中括号,这样的话我们只掌握这一种方式就比较清楚了。呃,那同样,我们这是在命令行里面做了一个测试,我们接下来呢,也可以在脚本里面尝试的去做一下,比方说我们现在就定义这样的一个脚本,非常简单,我们前面不是讲了可以给参数吗?那我们就定义一个做加法两个数加法计算的脚本,就叫at sh。
08:09
那么接下来它执行的时候呢,后面跟上第一个加数,然后再跟上第二个加数,最终返回的就是这两个加数A加B的值。哎,所以这个怎么样计算呢,怎么样做这个实现呢?好我们来看一下啊,直接就是为a.SH好,我们这个应该是不要把它放在外面的root目录下边,还是进入到script下边去,然后。VIADD.sh。进来之后,首先我们还是应该把前面的写上啊,叹号BBA。然后接下来我们其实很简单,直接echo一下对应的结果就可以了啊,那或者说我们这里边也可以先定义一个叫做SUM2数和的这样一个东西,那它应该等于什么呢?当然要做一个加法计算了。
09:02
Dollar,然后里边是中括号,里边中括号,那当然一个是第一个加数DOLLAR1,另外一个是第二个加数DOLLAR2,哎,这样的话就把它得到了,那后面我们可以直接sum等于Dollar sum,注意前面的sum,这是我们真正要输出的一个字,后面的Dollar sum才是计算出来的结果变量。这样的话我们就保存一下退出,然后接下来可以。同样还是需要去修改一下它的执行权限。然后接下来执行当前的脚本,我们可以运行一下,比方说25和89。我们可以看到它的和等于114,这样的话就实现了我们计算两数和的这样一个操作。诶,所以我们可以看到啊,这样一个脚本执行的过程,这就也像一个命令啊,或者说也像我们在编程语言里边的函数一样,哎,那后面的这两个输入的参数,就像我们函数的行参一样,哎,所以本质上啊,我们都可以把它理解成一组操作的。
10:07
提取一组操作的集合,那我们想,你如果要在一些编程语言里面定义函数,或者在Java里面定义方法,不也是一系列操作的集合吗?所以现在我们的这个操作也是一样的,这就是关于linknu she里边运算符的用法。
我来说两句