读书笔记《Linux命令行与shell脚本编程大全》第十二章
- 2023-03-06 10:00:00
- 赵岩
- 原创 566
12.1 使用if-then语句
if-then语句格式为:
if command
then
commands
fi
在bash shell中的if语句会运行if后面的命令,如果该命令的退出状态码是0那么位于then部分的命令就会被执行;退出状态码非0就不会被执行。
在then的位置可以使用多条命令,bash shell会将这些命令当成一个块,如果if命令的退出状态码是0那么位于then部分的所有命令都会被执行;退出状态码非0时命令都会被跳过。
12.2 if-then-else语句
if-then-else语句格式:
if command
then
commands
else
commands
fi
与if-then语句不同的是,当if语句中的命令返回非零状态码时,bash shell会执行else部分中的命令。
12.3 嵌套if
使用嵌套if-then语句检查脚本代码的多种条件,嵌套if-then语句位于主if-then-else语句的else代码块中
else部分存在另外一种格式:elif,elif使用另一个if-then语句延续else部分
还可以通过在嵌套elif中加入一个else语句来实现检查拥有目录但不存在用户以及没有拥有目录的不存在用户的情况。
在elif语句中,紧跟其后的else语句属于elif代码块。elif语句可以多个串联,形成嵌套组合,每个命令都会根据命令是否返回退出状态码0来执行。
12.4 test命令
test命令提供了在if-then语句中测试不同条件的途径。如果test命令中列出的条件成立,test命令就会退出并返回状态码0;如果条件不成立,test命令就会退出并返回非零的退出状态码,并且if-then语句不会执行。
test命令格式:test condition(其中condition是test命令要测试的一些列参数和值)
当不写test命令中的condition部分时,会以非0 的退出状态码退出并执行else语句块
当test命令确定变量中是否存在内容时:
bash shell中可以使用[ condition ]的方法与test condition测试方法一致
1.数值比较
注意:bash shell只能处理整数
2.字符串比较
(1)字符串相等性
在比较字符串相等性时比较测试会将所有的标点和大小写情况都会考虑在内。
(2)字符串顺序
当开始使用测试条件的大于或小于功能时,要考虑两个问题:
大于号和小于号必须转义,否则shell会把它们当作重定向符号,把字符串值当作文件名。
大于和小于顺序和sort命令所采用的不同。
(3)字符串大小
-n和-z可以检查一个变量是否含有数据
3.文件比较
(1)检查目录
-d测试会检查指定的目录是否存在于系统中,若存在就输出then中的语句,若不存在就输出else中的语句。
(2)检查对象是否存在
-e比较允许脚本代码在使用文档或目录前先检查是否存在。
(3)检查文件
-e比较用于文件和目录,要确定指定对象为文件必须使用-f比较
(3)检查是否可读
使用-r比较测试文件是否可读
(4)检查空文件
使用-s比较检查文件是否为空,尤其是在不想删除非空文件时。
(5)检查是否可写
使用-w比较会判断对文件是否有可写权限。当有权限时,-w测试表达式会返回零退出状态,执行then代码块并记录时间戳;当没有权限时,-w测试表达式会返回非零的退出状态码,时间戳不会被记录
(6)检查文件是否可以执行
使用-x比较判断特定文件是否有执行权限
(7)检查所属关系
使用-O比较可以测试出是否为文件的属主
(8)检查默认属组关系
使用-G比较会检查文件的默认组
(9)检查文件日期
使用-nt比较会判断一个文件是否比另一个文件新
使用-ot比较会判断一个文件是否比另一个文件旧
12.5 复合条件测试
if-then语句允许使用布尔逻辑组合测试,有两种方法可用:
(1)第一种布尔运算使用AND布尔运算符来组合两个条件,格式为:
[ condition1 ] && [ condition2 ]
使用该运算时两个比较都必须满足,否则就会出现
(2)第二种布尔运算使用OR布尔运算符来组合两个条件,格式为:
[ condition1 ] || [ condition2 ]
12.6 if-then的高级特性
1.使用双括号
双括号命令格式为:(( expression )),其中expression可以是任意的数学赋值或比较表达式,可运用表中的命令符号进行使用。
2.使用双方括号
双方括号命令格式为:[[ expression ]],其中expression使用了test命令中采用的标准字符串比较并提供了模式匹配的特性
12.7 case命令
case命令为elif语句解决了不停检查同一变量值的问题,该命令会采用列表格式来检查单个变量的多个值并且会将指定的变量与不同模式进行比较。