使用 if 和 elif 中嵌套else结合使用,让脚本检查拥有目录的不存在用户以及没有拥有目录的不存在用户






elif语句中,紧跟其后的else语句属于elif 代码块,它们并不属于之前的if-then代码块



bash shell 的一种条件测试方法,无需在if-then 语句中声明test命令

if  [ condition ]

then

        commands

fi

( 中括号中的比较的变量数值只能是整数,浮点数的比较将会出现错误 )

可以判断三类条件:

1、数值比较

2、字符串比较

3、文件比较

1、数值比较





2、字符串比较


比较

描述


str1 = str2

检查str1是否和str2相同


str1 != str2

检查str1是否和str2不同


str1 < str2

检查str 1是否比 str2 小


str1 > str2

检查str1是否比str2大


-n  str1

检查str1的长度是否非0


-z  str1

检查str1的长度是否为0 

 

 

 

 

 

 

 

但是当你使用 < > 号时,就会出现一些不易察觉的问题





上面的脚本中只使用了 > 号,没有出现错误。但是脚本把 > 号解释成了输出重定向,因此它创建了一个名为ZHJ的文件,原因是由于比较返回了退出状态码0
,if语句便以为所有命令都成功结束了。

要解决此问题只用将  > 正确转义即可



另外一个小问题就是 比较 大小写字母 与  sort 的区别 ,除非你经常处理大小写字母,否则几乎遇不到:

在比较测试中,大写字母被认为是小于小写字母的,但sort命令恰好相反。



3、文件比较 

文件比较功能

比较

描述

-d  file

检查file是否存在并是一个目录

-e  file

检查file是否存在(可文件或目录)

-f  file

检查file是否存在并是一个文件

-r  file

检查file是否存在并可读

-s  file

检查file是否存在并非空

-w  file

检查file是否存在并可写

-x  file

检查file是否存在并可执行

-O  file

检查file是否存在并属当前用户所有

-G  file

检查file是否存在并且默认组与当前用户相同

file1  -nt  file2

检查file1是否比file2新

file1  -ot  file2

检查file1是否比file2旧 





比较两个文件日期:( 这里有个问题就是当比较的文件不存在时,测试将会返回一个错误的结果 )





所以比较文件时间时首先要确定文件是否存在,可以使用 -f 选项

 复合条件测试:

             if - then 允许使用布尔逻辑来组合测试,有两种布尔运算符可以使用:

               [ condition1 ]  && [  condtion2 ]

               [ condition2 ]  ||  [  condition2 ]








case  variable  in pattern1  |  pattern2)  commands1 ;; pattern3)  commands2;;
*)  default  commands;; esac

case命令会将指定的变量与不同模式进行比较,如果变量和模式是匹配的,那么shell会执行为该模式指定的命令。可以通过竖线操作符在一行中分割出多个模式,星号会捕获所有与已知模式不匹配的值。