使用 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会执行为该模式指定的命令。可以通过竖线操作符在一行中分割出多个模式,星号会捕获所有与已知模式不匹配的值。
热门工具 换一换