持续更新中Linux命令行与Shell脚本编程大全(第3版)读书笔记12-20章

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了持续更新中Linux命令行与Shell脚本编程大全(第3版)读书笔记12-20章相关的知识,希望对你有一定的参考价值。

《Linux命令行与Shell脚本编程大全(第3版)》读书笔记

第十二章 使用结构化命令

根据条件使脚本跳过某些命令,这样的命令称为结构化命令(structured command)。结构化命令允许改变程序执行的顺序。

If-then语句:

If command

Then

Commands

Fi

如果if后的command执行退出码是0(也就是执行成功了),then后面的语句就会被执行。

也可以写成:

If command; then

Commands

Fi

注意了,if后的command结果是会被输出的。(执行脚本后)

If-then-else语句:

If command

Then

Commands

Else

Commands

Fi

If-then-elif-then-else

If command1

Then

Commands

Elif command2

Then

Commands

Else

Commands

Fi

多个elif嵌套:

If command1

Then

Command set 1

Elif command2

Then

Command set 2

Elif command3

Then

Command set 3

Elif command4

Then

Command set 4

Fi

test语句也是用于判断的,语法如下:

Test condition

if一起配合使用:

If test condition

Then

Commands

Fi

If test $var,这表示测试var是否空值,如果空值,表示假,不执行then后面的语句,如果非空值,表示真,执行then后面的语句。

也可以使用if [ condition ]方法代替。

test命令可以判断三类条件:

数值比较、字符串比较、文件比较。

数值比较:

-eq,等于。

-ge,大于或者等于。

-gt,大于。

-le,小于或者等于。

-lt,小于。

-ne,不等于。

注意,数值比较只能是整数。

字符串比较:

=,相同

!=,不相同

<,小于

>,大于

-n strstr长度非0

-z strstr长度为0或者没定义。

注意><使用时,需要转义,不然成了重定向符号。字符串比较中,大写是小于小写的。

文件比较:

-d file,是否存在并且是个目录

-e file,是否存在

-f file,是否存在并是个文件

-r file,是否可读

-s file,存在并且非空

-w file,存在并且可写

-x file,存在并且可执行

-O file,是否存在并且属于当前用户所有

-G file,是否存在并且默认组与当前用户相同

File1 -nt file2file1是否比file2新,针对编写软件安装很有效。比较的是创建日期。比如系统上不愿意安装一个比现在还旧的文件。

File1 -ot file2file1是否比file2旧,针对编写软件安装很有效。比较的是创建日期。

复合条件测试:

[ condition 1 ] && [ condition2 ],两个条件都满足,才执行then

[ condition 1 ] || [ condition2 ],一个条件满足,就执行then

If-then语句使用高级功能:

用于数学表达式的双括号、用于高级字符串处理功能的双方括号。

双括号允许使用更多的数学符号:

Val++,后增

Val--,后减

++val,先增

--val,先减

!,逻辑求反

~,位求反

**,幂运算

<<,左位移

>>,右位移

&,位布尔和

|,位布尔或

&&,逻辑和

||,逻辑或

双括号可以用于任意的数学赋值或者比较表达式。test一般是用标准的数学运算符。

比如:

#!/bin/bash

Val1=10

If (( $val1 ** 2 > 90 ))

Then

(( var2 = $var1 ** 2 ))

Fi

可以看到,这里的大于号,不需要转义,这是双括号的特性。

双方括号针对了字符串比较的高级特性。语法如下:

[[ expression ]]

可以使用匹配模式。比如:

#!/bin/bash

If   [[ $USER = r* ]]

Then

Echo "Hello $USER"

Fi

case语句适合多个elif的这种语句模式,语法如下:

Case var in

Pattern 1 | pattern 2) commands1;;

Pattern3) commands2;;

*) default commands;;

Esac


本文出自 “Alex的博客” 博客,请务必保留此出处http://houjun19830610.blog.51cto.com/9269760/1872399

以上是关于持续更新中Linux命令行与Shell脚本编程大全(第3版)读书笔记12-20章的主要内容,如果未能解决你的问题,请参考以下文章

《Linux命令行与shell脚本编程大全》第九章 安装软件程序

linux命令行与shell脚本编程大全---bash shell命令

《Linux命令行与Shell脚本编程大全第2版.布卢姆》pdf

Linux 命令行与 shell 脚本编程大全 1.初识Linux shell#yyds干货盘点#

《Linux命令行与shell脚本编程大全》 第六章环境变量

《Linux命令行与shell脚本编程大全》 第五章理解shell