十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

20.5 shell脚本中的逻辑判断

十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

格式1例子:十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断(要注意有空格)-gt是大于的意思

写成脚本就是:

十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

格式2例子脚本:(比第一种多了一个else,意思是反之则怎么样)

十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

我们也可以看一下它的执行过程十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

格式3例子脚本:(意思是大于4显示>1,大于1并且小于6则显示<6 >1,既不大于1也不大于6则显示nook)elif等于又加了一个条件判断,可以写多次

十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

如果想直接用>或<,那么就用这种格式:十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

大于:-gt

小于:-lt

等于:-eq

不等于:-ne

大于等于:-ge

小于等于:-le

条件我们也可以写多个:&&表示并且,||表示或者

十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

20.6 文件目录属性判断

十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

第一个例子:

十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

意思是如果文件$f存在那么执行echo $f exist,不存在就创建这个文件。

剩下几个例子写法和上面类似。

判断是否可读可写可执行是根据当前执行用户判断的。

平时我们这样用的比较多:(意思是如果这个文件是普通文件并且存在的话,那么就删了它,这里的&&表示前面的成立才能执行后面的。)

十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断它的效果等同于十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断,所以还是比较方便的,他只需要写一行。

中间的&&换成||这表示前面的不成立才执行后面的。

十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断前面加叹号则是取反。

20.7 if特殊用法

十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

第一个特殊用法的例子:(如果没有红框部分,那么当lalal文件不存在的时候就会报错,也就是一个bug)

十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

其实我们遇到这种情况完全可以给它加一个-f的判断就更完美了。(这个时候-z的判断就可以不用了),要记得加exit退出,不然不存在这个文件的时候,它还是会往下执行。

十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

-n和-z的意思是相反的,意思是当变量a不为空,所以它也可以用来判断文件的内容是否不为空。(变量需要双引号括起来,但是文件不用)

十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

也可以判断变量是否不为空,(这里的b变量是空的)

十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

我们还可以使用命令的结果作为判断条件。

比如说我们想看看系统用户中是否有user1这个用户,我们就会想到用这个命令:(w表示一个单词,是为了避免会有user11被匹配出来)

十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

那么我们可以这么写脚本,(但是它会输出红框内容)

十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

不想显示输出那么我们可以使用-q就可以达到目的。

十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

反之如果user1不存在,那么我们可以这么写

十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

20.8 case判断 

十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

当值为value1的时候,怎么这怎么样

当值为value2的时候,怎么这怎么样

除此之外又怎么样(除此之外用*)表示)

;;表示一个判断结束。

在case中是可以使用|的,如value1|value2)他的意思是或。

下面我们来写一下脚本:

十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断    十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

这个脚本的目的是让用户输入一个数字,然后用这个脚本去判断这个数字的范围。复制代码进去的时候记得去掉特殊符号。

read是让用户输入,末尾的n是捕获用户输入的字符的变量名。

十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

exit后面的1,就是$?的值。(也就是说如果脚本只有这一段的话,执行完之后值为空的话,用$?检查错误的时候会显示1)

十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

n1这一行的意思是判断输入的是否是数字十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断当输入的是数字会被清空,

十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断

表示n1不为空的话输出后面的内容,并且$?显示1,也就是说输入的不是数字的话就不会清空,那么也就非空,非空的话就会输出后面的内容(意思是让你输入一个纯数字))

/20.9 case判断

如果为空,也就是用户输入的是数字的时候就会往下走,

十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断表示输入的数字小于60并且大于等于0的时候我们标记为tag为1,(这是一个变量,因为我们需要用case判断,tag=1这个变量是为了case判断准备的)

十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断格式与上面一样,else就是不满足如上条件那么tag=0,这种就是输入超过100的情况。

十六周三次课 2018.02.06 shell脚本中的逻辑判断、文件目录属性判断、if特殊用法、case判断然后我们就开始使用case判断,使用了上面的tag1-4变量。

我们可以执行一下试试,也可以看下它的执行过程。