Linux系统shell脚本编程笔记——使用if-then语句等结构化命令或test命令

目录

1、使用if-then语句

 2、使用if-then-else语句

 3、嵌套if

4、test命令

4.1、数值比较

4.2、字符串比较

 4.3、字符串大小

 4.4、文件比较

5、复合条件测试

6、if-then的高级特性

6.1、使用双括号

 6.2、使用双方括号

 7、case命令


 完整笔记请前往此处获取:https://download.csdn.net/download/qq_55908180/88366003

1、使用if-then语句

if-then语句是最基本的结构化命令,格式如下:

If command    

then 

        commands  

fi

shell的if语句会执行if之后的命令,如果该命令的退出状态码是0,则就是继续执行then后面的命令;如果if后的命令的退出状态码是其他值,则不会执行then后面的命令,但是shell会继续执行脚本中的下一个命令。Fi语句表示if-then语句到此结束。如:

例1:if后的命令可以正常执行

Linux系统shell脚本编程笔记——使用if-then语句等结构化命令或test命令_第1张图片

 例2:if后面的命令无法正常执行

Linux系统shell脚本编程笔记——使用if-then语句等结构化命令或test命令_第2张图片

 Then后面可以跟大于一条命令,只要if语句后的命令的退出状态码是0,则then后面的命令都可以执行;如果if语句后面的命令的退出状态码非0,则then后面的命令全部跳过。如:

Linux系统shell脚本编程笔记——使用if-then语句等结构化命令或test命令_第3张图片

 2、使用if-then-else语句

在if-then语句中,不管命令成功与否,你都只有一种选择。而if-then-else语句就在语句中提供了另一组命令:

If command    

then 

        commands     

else 

        commonds     

fi

在if后的命令的退出状态码为非0时,跳过then后面的命令,直接执行else后的命令。如:

Linux系统shell脚本编程笔记——使用if-then语句等结构化命令或test命令_第4张图片

 3、嵌套if

嵌套的if-then语句位于主if-then-else语句的else代码块中。格式如下:

If command1   then commands  else commands   if command2   then commands  fi   fi

还有另外一种更易于阅读的格式:

If command1  

then

        commands 

elif  command2  

then

        commands   

 fi

4、test命令

test命令提供了if-then语句中测试不同的途径,如果test命令中列出的条件成立,test命令就会退出并返回退出状态码0。命令格式如下:test  condition

Condition是test命令要测试的一系列参数和值。当用在if-then 语句中时,如下:

if test condition    then commands    fi  如果test不写condition部分,他会以非0的退出状态码退出,并执行else语句块。如:

Linux系统shell脚本编程笔记——使用if-then语句等结构化命令或test命令_第5张图片

Bash shell 提供了另一种条件测试方法,无需在if-then语句中声明test命令。格式如:

If [ condiftion ]      then commands      fi

方括号定义测试条件,注意:这种方法必须在测试条件前后都加上一个空格才行,否则会报错。

Test命令可以判断三类条件:1、数值比较;2、字符串比较;3、文件比较。

4.1、数值比较

Test命令最常见的情形是对两个数值的比较

比较

描述

n1  -eq  n2

检查n1 是否与n2相等

n1  -ge  n2

检查n1 是否大于或等于n2

n1  -gt  n2

检查n1 是否大于n2

n1  -le  n2

检查n1 是否小于或等于n2

n1  -lt  n2

检查n1 是否小于n2

n1  -ne  n2

检查n1 是否不等于n2

帮助记忆:

e、eq==equal   (等于)

g、gt==greater  (更大)

l、lt==less         (更小)

n==no                (不)

Linux系统shell脚本编程笔记——使用if-then语句等结构化命令或test命令_第6张图片

 注意,bash shell 只能处理整数,在test命令中不能使用浮点值。

4.2、字符串比较

字符串比较测试

比较

描述

str1 =str2

检查str1是否与str2相同

str1 !=str2

检查str1是否与str2不同

str1

检查str1是否比str2小

str1 >str2

检查str1是否比str2大

-n str1

检查str1的长度是否为非0

-z str1

检查str1的长度是否为0

注意,在比较字符串是否相等时,比较测试会把所有的标点和大小写情况都考虑在内。

Linux系统shell脚本编程笔记——使用if-then语句等结构化命令或test命令_第7张图片

要测试一个字符串是否比另一个字符串大要注意两个问题:

  1. 大于号和小于号必须转义,否则可能会被当作重定向符使用;
  2. 由于比较测试中使用的是标准的ASCⅡ顺序,会根据每个字符的ASCⅡ值来决定排序结果。

如:

Linux系统shell脚本编程笔记——使用if-then语句等结构化命令或test命令_第8张图片

 Linux系统shell脚本编程笔记——使用if-then语句等结构化命令或test命令_第9张图片

 4.3、字符串大小

-n 和-z 可以检查一个变量是否含有数据

Linux系统shell脚本编程笔记——使用if-then语句等结构化命令或test命令_第10张图片

 4.4、文件比较

文件比较是在bash shell中最强大、使用最多的比较形式。

比较

描述

-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

检查file是否比file2新

file1 -ot file2

检查file是否比file2旧

5、复合条件测试

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

  1. [ condition1 ] &&[ condition2 ]
  2. [ condition1 ] ||[ condition2 ]

第一种布尔运算使用AND布尔运算符组合两个条件。只有两个条件全都满足的时候才能使then部分的命令执行。

第二种布尔运算使用了或运算符来组合两个条件,只要有至少一个条件为真,就可以继续执行then部分的命令。如下:

Linux系统shell脚本编程笔记——使用if-then语句等结构化命令或test命令_第11张图片

6、if-then的高级特性

在bash shell中提供了两项可以在if-then语句中使用的高级特性:

1、用于数学表达式的双括号;

2、用于高级字符串处理功能的刷个方括号。

6.1、使用双括号

双括号命令允许在比较过程中使用高级数学表达式。test命令只能在比较中使用简单的算术操作,双括号命令提供了更多的数学符号。双括号的命令格式:

(( expression )) 其中expression可以是任意的数学赋值或比较表达式。

符号

描述

val++

后增

vla--

后减

++val

先增

--val

先减

!

逻辑求反

~

位求反

**

幂运算

<<

左位移

>>

右位移

&

位布尔和

|

位布尔或

&&

逻辑和

||

逻辑或

可以在if语句中用双括号命令,也可以在脚本中的普通命令里使用。如:

Linux系统shell脚本编程笔记——使用if-then语句等结构化命令或test命令_第12张图片

 6.2、使用双方括号

双方括号命令提供了针对字符串比较的高级特性。命令格式:[[ expression ]]。它提供了test命令未提供的另一个特性——模式匹配  如:

Linux系统shell脚本编程笔记——使用if-then语句等结构化命令或test命令_第13张图片

 7、case命令

case命令会采用列表格式来检查单个变量的多个值。如:

case variable in 

        pattern1 | pattern2)

                commands1;;   

        pattern3)

                commands2;;   

        *)          

                default commands;;

esac

Linux系统shell脚本编程笔记——使用if-then语句等结构化命令或test命令_第14张图片

你可能感兴趣的:(shell脚本编程,Linux命令,linux,ubuntu,bash)