Shell 第二章条件语句

Shell编程之条件语句


引言:本片内容主要介绍了各种文件测试以及if语句的部分知识,我们需要了解到一个文件存在与否,是什么样的文件,对一个文件进行判断用什么办法,多个条件对比的方法,在if语句当中应如何应用

一、条件测试

1.文件测试

要使Shell脚本程序具备一定的“智能”,面临的第一个问题就是如何区分不同的情况以确定执行何种操作,例如当磁盘使用率超过95%时,发送告警信息;当备份目录不存在时,能够自动创建;当源码编译程序时,若配置失败不在继续安装

Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0时表示成功,否(非0值)表示失败或出现异常。使用专门的测试工具—test命令,可以对特定文件进行测试,并根据返回值来判断条件是否成立(返回值为0表示条件成立)

test命令:测试表达式是否成立,若成立返回0,否则返回其他数值

格式1: test 条件表达式

格式1: [ 条件表达式 ]

-d :测试是否为目录 (Directory)

-e :测试目录或文件是否存在(Exist)

-f :测试是否为文件(File)

-r :测试当前用户是否有权限读取(read)

-w :测试当前用户是否有权限写入(write)

-b :测是否为设备文件

-c :测试是否为字符设备文件

-s :测试存在且文件大小为空

-L :测试是否为链接文件

**例:**执行条件测试操作以后,通过预定义变量 ? 可 以 获 得 测 试 命 令 的 返 回 状 态 值 , 从 而 判 断 该 条 件 是 否 成 立 , 例 如 : 执 行 以 下 操 作 可 测 试 文 件 或 目 录 是 否 存 在 , 如 果 返 回 值 ?可以获得测试命令的返回状态值,从而判断该条件是否成立,例如:执行以下操作可测试文件或目录是否存在,如果返回值 ??为0,表示存在此目录,否则表示不存在或者虽然存在但不是目录
在这里插入图片描述
在这里插入图片描述

2.整数值比较

常用的测试操作符

-eq:等于(Equal)

-ne:不等于(Not Equal)

-gt:大于(Greater Than)

-lt:小于(Lesser Than)

-le:小于或等于(Lesser or Equal)

-ge:大于或等于(Greater or Equal)

shell脚本中需要用“==”否则不成立

在这里插入图片描述

用户登录告警判断终端进程用户多少,如果小于4个,输出信息“当前用户太少”
在这里插入图片描述

在这里插入图片描述

**例2:磁盘容量不足告警

free 查看输出内存信息
在这里插入图片描述

3.字符串比较

格式1:[ 字符串1 = 字符串2 ]

​ [字符串1 != 字符串2 ]

格式2:[ -z 字符串 ]

常用的测试操作符:

  • =:字符串内容相同
  • !=:字符串内容不同,!号表示相反的意思
  • -z:字符串内容为空

[ $LANG != zh_CN.UTF-8 ] && echo “当前系统语言为中” || echo “当前系统语言是中文”

在这里插入图片描述
在这里插入图片描述
注:&&逻辑且;而且的意思
在这里插入图片描述

4.逻辑测试

格式1:[ 表达式1] 操作符 [ 表达式2 ]……

格式2:命令1 操作符 命令2

常用的测似乎操作符:

  • -a或&&:逻辑与,”而且“的意思
  • -o或||:逻辑或,"或者"的意思
  • !:逻辑否
    在这里插入图片描述在这里插入图片描述

二、if语句的结构

单个括号"[]":必须要有空格,两个字符或数字之间的比较,左右也必须有空格

​ 条件判断:text 的一种形式,[]中间只能使用 = 和 ! 比较,如果使用 <、> 需要进行转义;还有中间如果使用比较数字要用 -lt/lt 等符号,但是不能使用<来比较数字,他会当初字符串处理

两个括号"[[]]":可以用于处理逻辑命令,也可以处理字符串是否相等,且可以使用<、>不需要进行转义

1.单分支if语句

实际上使用"&&“和”||"逻辑测试已经可以完成简单的判断并执行和相应的操作,但是当需要选择执行的命令语句较多时,这种方式将使执行代码显得很复杂,不好理解,而使用专用的if条件语句,可以更好的整理脚本结构,使得层次分明,清晰易懂

单分支if语句:对于单分支的选择结构,只有在"条件成立"时才会执行相应的代码,否则不执行任何操作

在这里插入图片描述

判断目录是否存在,不存在就自动下载:

在这里插入图片描述

判断有没有/data目录,没有就下载

在这里插入图片描述

2.if语句双分支结构
if 条件测试操作

	then

	命令序列 1

	else

	命令序列2

fi

在这里插入图片描述

测试192.168.206.190能否Ping通

在这里插入图片描述
在这里插入图片描述

**例2:**判断输入的用户是否存在,存在就会提示已存在,不存在自动创建该用户并设置密码

在这里插入图片描述
在这里插入图片描述

**例3:**开启查询apache服务

在这里插入图片描述
在这里插入图片描述

3.多分支结构
if 条件测试操作
	then 
	命令序列1
elif
条件测试操作2
	then
	命令序列2
else	
命令序列3
fi

在这里插入图片描述

多种条件测试

例1判断文件类别:,如果输入方法变量内容不是什么文件,会告诉你无法判断文件类别

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

例2输入成绩得知评价结果

在这里插入图片描述
在这里插入图片描述

4.嵌套if语句

在这里插入图片描述

赋予脚本权限,安装htppd,
在这里插入图片描述

查看httpd是否运行
在这里插入图片描述

三、case多分支语句结构

1.case多分支语句概述

case语句可以使脚本程序的结构更加清晰、层次分明,常用于服务的启动、重启、停止的脚本,有的服务不提供这种脚本,需要case语句编写;

**case适用场景:**当某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列,这种情况与多分支的if语句非常相似,只不过if语句需要判断多个不同的条件,而case语句只是判断一个变量的不同取值

**case注意事项:*case行尾必须为单词"in",每一模式必须以右括号“)”结束,双份好";;“表示命令序列的结束。模式字符串中,可以用方括号表示一个连续的范围,如”[0-9]“,还可以用竖杠符号”|“表示或,如"A|B”,最后的" ) “表示默认模式,其中的”*"相当于通配符

case语句的执行流程:,首先使用"变量值"与模式1进行比较,若取值相同则执行模式1后的命令序列,直到遇见双分号";;“后跳转至esac,表示结束分支;若与模式1不匹配,继续与模式2进行比较,若取值相同则执行模式2后的命令序列,直到遇见双分号”;;“跳转到esac,表示结束分支……依次类推,如找不到任何匹配的值,执行默认模式”* )"后的命令序列,直到遇见esac后结束分支。
在这里插入图片描述

例1:判断字符类型

输入字符,判断出输入的是哪种字符类型

在这里插入图片描述
在这里插入图片描述

例2:编写Apache开启关闭服务

在这里插入图片描述
在这里插入图片描述

例3:输入成绩简单方法

在这里插入图片描述
在这里插入图片描述

总结

结合上述我编辑的内容,对于条件测试的语法中,文件测试、整数值比较、字符串比较以及逻辑测试我都做了一些简单的案列,这都是为了if语句的铺垫,想要写好一个脚本就必须把这些基础理清思路,

后半部分我从生产环境中极大简化了一部分,做出几个案例可以了解到单分支、双分支、多分支、嵌套语句的语法,该怎么使用,以及case多分支语句的语法,这也是会经常使用到的

**1.条件测试的语法:**文件测试、整数值比较、字符串比较、逻辑测试

**2.if条件语句的语法:**单分支、双分支、多分支、嵌套

3.case多分支语句的语法.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值