00:00
上一节我们介绍了linknux shell当中的条件判断,那其实我们会发现啊,进行条件判断本身来讲并不是目的,我们的目的其实是要根据某一个条件来判断接下来要做什么样的操作,诶,那所以呢,条件判断往往是用在哪里呢?主要就是用在条件的分支流程上面,所以接下来我们要介绍的就是linkx shell当中的流程控制啊,这也是我们整个写一个程序的重点,把这一部分流程控制掌握了,那我们整个这个程序的架构啊,也就能非常容易的搭建起来了。那那我们回忆一下编写一段代码,写一个程序的时候,一般情况这个代码它的程序流程是怎么样执行的呢?啊,那其实我们知道啊,程序结构主要就是三大流程嘛,一种就是。顺序。这个我们知道就不用设计了,所有的几乎所有的编程语言,那它默认的执行都是从上到下按照顺序依次执行的,诶,那所以正常情况下,那我们就是写一行语句,再写下一句,按照顺序我们操作的步骤一步一步把它写下来就可以了,像shell这样的脚本语言,那更是这样啊,因为它是写一句解释一句,执行一句嘛,所以这个我们就不用再说了,除了顺序之外,那另外我们常用的其实就是。
01:21
分支和循环啊,那首先我们来看这个分支语句。分支简单来讲的话,呃,应该分成这么两大类,一种就是。我这里首先前面做一个条件判断,然后根据这个条件判断呢,就直接分成两叉。就像我们一棵树分了两个树枝一样啊,那当然了,另外一种情况就是不要只基于两种情况去分,我还可以分成三叉、四叉、五叉等等等等各种各样的情况可以把它分的更多啊,所以接下来我们就来介绍这个分支流程判断到底怎么控制,那我们看到分支流程这个最核心的应该就是中间得有一个条件判断吧,哎,那所以这里边就用上了我们前面第五章介绍的条件判断的语法规则。
02:07
最简单的进行分支流程控制的当然就是if else了,所以接下来我们首先来讲一讲if else的应用。跟大多数的编程语言类似啊,我们知道很多编程语言肯定都是支持这个if的,它的简单来讲,当前的这个语法规则就是if后边跟上一个条件判断的表达式啊,注意这里边我们就是前面讲过的这个中括号。相当于这就是一个返回出false布尔类型判断值的一个表达式,那if如果后边这个为真。我们说的啊,返回值为true,这个时候后面加一个分号,然后than,啊,注意这个必须要写一个than than就是表示接下来要执行什么啊,那剩下是我们所要执行的那些操作,我们的代码程序啊,都写在这里,在下边呢,最后判断分支要结束的时候加上一个Fi。
03:03
诶,所以我们看到它这个有点特殊啊呃,在一般的编程语言里边,我们习惯的写法可能是if后边跟上一个,诶条件表达式,然后它是拿一个花括号括起来里面的内容的,它是用这个花括号表示我们当前条件分支语句,这个代码块到底从哪里开始,从哪里到哪里结束。但是在这个link shell里面大家就发现了啊,它并不能直接用这个括号干这些事儿啊,因为在shell里边我们知道啊,它的括号都有单独的用途,那这样的话,你省略了花括号,那就不知道哪里开始哪里结束了,那怎么办呢?诶,他就只好用这种更加直观的语言来进行表示啊,那就是后面加一个than,那注意最后的结束呢。它是直接把这个if反过来,If是if嘛,它反过来写Fi啊,这就相当于我们一个正向的括号和一个反向的括号,把之间的内容括起来。所以整体来讲,这个语法有点诡异,但是还是可以理解的。
04:02
这里需要注意的是,我们看这里出现了一个分号,这个分号是表示什么呢?诶,这其实是表示我们当前在一行里边出现了相当于可以分开的两步命令的实现啊,其实这个在link shell里边本身就有这样的一个规则的啊,就比如说我们在这个BA控制台里边,我们完全可以在一行里边敲两个命令,哎,那有同学说,诶,那是不是前面我们说的那个管道操作呢?呃,不是啊,管道操作是前面这一部分做完了之后,它的结果通过管道直接传递给后面的命令。我们现在呢,要做的操作可以说就是完全不相干,只要把两个命令之间用分号分开就可以,比方说我们看一下啊呃,当前我可以直接CD到。我们可以CD到后at硅谷这个目录下边去,然后怎么样呢?加一个分号,后边直接LS-L,诶,那我们会想到这个LS它本身。执行的应该是什么呢?看到的是我们当前root下边的内容,还是home-at硅谷下面的内容呢?我们执行一下就知道了。
05:07
我们可以看到这看到的是at硅谷下边的内容,而且我们现在的目录也已经切换了,切换到了硅谷。所以这就相当于是我们这里啊,用分号分割的一行命令是两个,我们这里就一下子执行了啊,当然它执行还是有先后的啊,先CD,然后再LS-L。所以整体来讲,呃,我们这里的这个than啊,用法可以认为跟那个是一样的,也就是说你可以把这里的这个分号去掉,然后把这个than写到下边也是一样的,所以我们看下边的这种写法跟上边这个是完全等价。那这里只有一个一服判断,然后再执行这个啊,这就是我们所说的单分制了,这个单分支其实就是说某种条件下,诶,我们接下来呢,要做某个操作,那在另外一种情况下,哎,就比方说这个是yes的时候,判断它为真的时候走下边,那如果要是no的时候怎么办呢?诶,No的时候就直接跳过中间这一步。
06:05
直接走到下边来。这就是我们所说的这个单分支,有可能把中间一步要跳过啊,接下来我们可以在控制台简单的来做一个测试。我们还是直接退回到root目录下边去啊,当然现在我们的工作目录其实没有多大关系啊,我们直接的在这里一行直接做一个逗号的分割,然后做一个测试就可以了,比如说哎,我们可以在这里直接if后边跟上条件判断啊,那比方说我们现在给一个变量吧,给一个A,比方说这个变量等于25,假装这是我们的一个年龄,然后呢,我判断一下这个年龄。怎么样,是不是我们想要的年龄,哎,那就是如果说当前的A这个变量啊。只要这个GT,这表示的是判断greater than是否大于,比方说大于18岁的话,诶,那你如果出去找工作的话,首先得大于18岁吧,要不然这个变成童工了啊,所以我们如果大于18岁的话,后边那就than。
07:03
那怎么样呢?啊,那我们干脆直接eo一个OK,哎,那如果同样还在后面写的话,我们再来一个分号Fi。哎,这样的话,我们看到直接输出的就是OK啊,那当然了,如果前面我们这个值直接改成15岁的话。再来判断一下,那显然就不OK了,所以这个其实很简单啊,呃,当然这一部分我们会发现也可以放在当前的这个。脚本里边直接去做这样的一个逻辑输出,那我们还是CAD到script下边去新建一个当前的if test的shell脚本。那首先呢,我们还是把这个头先写上。叹号b bash,然后接下来我们要做的其实也就是做一个依附判断。那我们现在干脆就把。需要的那个变量从外部去输入吧,啊,比方说我们输入一个当前的,呃,一个用户的名称,然后我们判断一下这个用户是否是艾特硅谷,哎,那我们知道这当前就是DOLLAR1要判断它是否等于字符串的话,我们可以直接等于at硅谷。
08:09
如果满足这样一个条件的话,哎,那我们直接在后面啊,因为在这个脚本里边,我们不需要写在一行用分号分割了,直接在这里来。好,那如果这样的话,我们就直接echo。啊,比方说我们写一句welcome。At硅谷。然后接下来结束的话,来一个Fi啊,这样反写if啊,Fi就结束了,那这种写法比较简单,那这里需要给大家多提一句的是,在实际的项目应用当中啊,呃,大家可能往往会看到另外一种写法,就是我们这里边做字符串比较的时候,因为你传进来的这个东西它有可能是空啊,那一旦出现这个空字符串就是不传东西的时候,它有可能会报错啊,比方说我们先退出去啊看一下。我们现在先把当前的这个脚本的。
09:00
执行权限先打开加X,然后接下来直接去做一个执行。我们看到它这里会告诉我们他期待一元表达式,为什么呢?呃,因为我们这里如果如果说。我们进去看啊,如果说这里什么东西都不给的话,显然这里就变成空了,你直接来一个空,然后这个中括号里边去,等于at硅谷,这它判断就有问题,所以说我们在这个很多实际的代码里边,往往会做一个什么样的一个小的调整优化呢?那就是我把这个啊括起来,后边跟一个X。也就是保证当前我们这个字符串至少有一个X,我们这就相当于是一个拼接嘛,啊字符串的拼接,然后后边呢,同样把X硅谷括起来。然后后边跟一个X这样的话,我们到外面来进行判断。哎,这样的话他就不会,至少不会报错了啊啊,那如果说后面我们随便输一个,比方说一个小明。
10:00
I,那当然不会输出我们想要的那个欢迎信息了,如果我们真的输入艾硅谷的话,这里就会显示welcome at硅谷啊,这就是使用if进行单分支条件判断进行处理的一个简单的事例啊。啊,当然了,我们这里边的这个条件大家可能会想到我这里只做了一个非常简单的判断啊,就是否等于,是否大于,那如果说我这里边有多个条件想要做组合判断行不行呢?诶,当然也是可以的啊,前面我们不是介绍过。多条件的组合判断吗?诶,那就是使用逻辑语或者逻辑或就可以啊,前面我们提到的这一个是相相当于是我们在有一些编程语言里边的这个短路语的操作,对吧?那就是假如说因为语的关系嘛,必须要全部为真能够执行成功啊,全部为真整个这个表达式才为真,所以你如果要是后边不跟一个条件,直接跟一个操作的话,那它表示的就相当于是前面为真的话,我就执行后边操作,如果为甲的话,那就不执行了啊,为甲的话后面就不做判断短路了嘛,直接就把这个就返回甲就完了啊,那如果是或呢,那就是前面为甲的话,我就要执行后边的要做一个判断,如果前面为真已经有真了,最后这个货的结果一定是真,那就不用破做判断了吧,这就是我们说的这个短路与短路货的一个原理啊,这是利用了这一个做了一个类似于JAVA3元运算符这样一个表达式的输出结果啊,那我们这里边如果要是一般情况应用的话,那。
11:30
往往是用语号去连接两个中括号,两个不同的条件来做逻辑与逻辑互啊,那比方说这里面我们可以if。哎,直接来做一下啊,那这里我们可以加一个与号,后边再来一个这样的一个条件判断啊中括号,那比方说前面我们是Dollar a。杠GT18要比18岁大,那如果说我们这个找工作的时候,可能很多用人单位是有相应的限制的啊,直接Dollar a还要。
12:01
Less than,小于35岁啊,有这样的一个判断,那这就是双重条件了,那后面我们直接这里,Then echo OK。Fi,所以接下来如果说诶,那我们先看一下当前的这个A是什么啊,因为我们刚才已经是做了这个判断了,当A一下啊,那现在是15,当然这个是不对的啊,当然不OK,那我现在如果是25岁的话。看一下诶,那是没有问题的,OK,如果是36岁的话。很悲剧,现在就又不OK了,哎,所以呃,很容易,我们使用这个逻辑与逻辑货啊,就可以做各种各样的条件的组合,放在if这里边就可以做相应的操作啊,那当然了,关于我们这里边使用这个逻辑与逻辑,或大家看到它是连接了两个中括号括起来的条件表达式,当然我们说你如果做这个短路语语的话,后边可以加一个具体的这个操作啊,直接eo也是可以的,那另外有时候我们可能会想到我看着这样的表达式就有点有点麻烦,就是if我本来认为啊,后边的判断就是我当前所要判断的东西,结果呢,你后边还来了一个语,我能不能把这个与直接放到同一个中括号里边呢?那就是相当于我们if后边就是一个括号,一个判断行不行呢?
13:20
当然也可以,但是我们现在的这个写法,你就不能直接把中括号去掉。然后把这两个表达式做一个语了,哎,这样的话它就会报错,那我们放在中括号里边的话,要用什么样的逻辑表示呢?哎,这里就又变成杠什么样的参数了啊,这里可以可以给大家多提一句啊,就是那要表示它俩的逻辑与关系的话,放在同一个中括号里边,我们用杠A。因为我们知道逻辑语是and嘛。哎,所以杠A就表示and逻辑与的关系,那如果要是逻辑或的话是二嘛,那就是杠O就是逻辑或的关系,那所以现在我们给了一个杠A,现在回车一下,诶,发现这个就不报错了,没有问题,因为现在A是36,所以我们不会EOOK,那我再给一个A是20。
14:09
现在我们看到就OOK了。所以这个呃,这就是关于这个if后边啊,做单条件判断的时候,单分支判断的时候,里边的条件其实也可以做各种各样的组合,哎,这就是单分支的具体的使用if基本的使用规则我们也就了解了。
我来说两句