shell编程-条件语句

143 阅读3分钟

前言

Shell的条件测试语句就是对条件进行判断,返回真和假,0表示真,非0表示假,和一般的编程语言相反,条件测试语句通常和if结合使用,实现不同判断结果执行不同操作的目的。

条件测试操作

text命令 使用专门的测试工具——test命令,可以对特定条件进行测试,并根据返回值来判断条件是否成立
格式一:text 条件表达式
格式二:[ 条件表达式 ] (注意条件表达式两边必须要有空格)

Snipaste_2022-08-28_22-48-33.png

文件测试与整数测试

文件测试
格式一:text 操作符 表达式
格式二:[ 操作符 表达式 ]

常用的操作符

操作符说明
-d测试是否为目录,且测试该文件是否存在(Directory)
-f测试目录或文件是否存在,是否为普通文件(Exist)
-e测试是否为为文件且测试该文件是否存在(File)
-x测试当前用户是否有执行权限(eXcute)
-r测试当前用户是否有权限读取(Read)
-w测试当前用户是否有权限写入(Write)

Snipaste_2022-08-28_23-01-07.png

整数测试
格式一:[ 整数变量一 操作符 整数变量二 ]
格式二:test 整数变量1 操作符 整数变量2

操作符

操作符说明
-eq等于(Equal)
-ne不等于(Not Equal)
-gt大于(Greter Than)
-lt小于(Lesser Than)
-le小于或等于(Lesser or Equal)
-ge大于或等于(Greater or Equal)

Snipaste_2022-08-28_23-09-06.png

字符串测试

格式:
[ "字符串1"  =  "字符串2" ]
[ "字符串1" !=  "字符串2” ]
[ -z "字符串" ]
[ -n "字符串" ]
(使用-z或-n测试变量时,变量需要加引号,避免有歧义而导致判断结果有误)

常用测试操作符

操作符说明
=字符串内容相同
!=字符串内容不同,!表示取反的意思
-z测试字符串是否为空,或者指定的变量是否为空值
-n测试字符串是否存在,即是否不为空

Snipaste_2022-08-28_23-18-44.png

逻辑测试

逻辑测试用于连接多个测试条件,并返回整个表达式的值。 逻辑测试主要有"逻辑与","逻辑或","逻辑否"三种。
格式一:[ 表达式1 ] 逻辑运算符 [ 表达式2 ]
格式二:命令1 逻辑运算符 命令2
逻辑运算符
-a或&&:逻辑与,而且的意思操作符前后条件都需成立
-o或||:逻辑或,或者的意思只需前后操作符中一个成立即可
!:逻辑否

Snipaste_2022-08-29_14-29-55.png

Snipaste_2022-08-29_14-39-07.png 查看指定主机是否在线

Snipaste_2022-08-29_14-53-38.png

if语句

单分支语句

Snipaste_2022-08-28_23-28-48.png

if 判断条件
then
条件成立的分支代码
fi 条件不成立直接结束

案例:判断已用磁盘空间是否大于80%,如果是就报警提示。

Snipaste_2022-08-29_15-14-20.png

Snipaste_2022-08-29_15-14-02.png 测试脚本:磁盘空间大于5%

Snipaste_2022-08-29_15-16-01.png

双分支语句

Snipaste_2022-08-28_23-28-56.png

if 判断条件
then
条件成立的分支代码
else
条件不成立的分支代码
fi

案例:检测80端口是否在监听,如果是,则提示”网站服务已在运行“;如果否,则启动httpd服务。

Snipaste_2022-08-29_15-32-47.png

Snipaste_2022-08-29_15-33-02.png

多分支语句

Snipaste_2022-08-28_23-29-05.png

if 判断条件1
then
条件为1的真的分支代码
elif 判断条件2
then
条件为2为真的分支代码
elif 判断条件3
then
条件为3的真的分支代码
...
else
条件都为假的分支代码
fi

案例:用多分支 if 条件语句来判断用户输入的是一个文件还是一个目录。

Snipaste_2022-08-29_16-43-37.png Snipaste_2022-08-29_16-43-22.png

case语句

Snipaste_2022-08-28_23-30-21.png

case 变量引用 in
模式1)
命令分支1
;;
模式2)
命令分支2
;;
...
*)
默认命令分支
esac

注意:case支持通配符
* :任意长度任意字符;? :任意单个字符;  [0-9] :指定范围内的任意单个字符 ; | :“或者”的意思,如: a|b。
案例:提示用户输入分数(0-100),判断分数范围,分出优秀、良好、及格、不及格四种。如果用户输入的分数值不在0-100之间,则提示重新输入。 Snipaste_2022-08-29_16-19-06.png Snipaste_2022-08-29_16-18-49.png