当前位置:网站首页>Shell之条件语句
Shell之条件语句
2022-08-03 04:12:00 【眼下一颗柠檬】
文章目录
前言
要使Shell脚本程序具备一定的"智能",面临的第一个问题就是如何区分不同的情况以确定执行何种操作。例如,当磁盘使用率超过95%时,发送告警信息;当备份目录不存在时,能够自动创建;当源码编译程序时,若配置失败则不再继续安装等
一、条件测试
1.文件测试
Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0时,表示成功,否则(非0值)表示失败或异常。
使用专门的测试工具–test命令,可以对特定条件进行测试,并根据返回值来判断条件是否成立(返回值为0表示条件成立)
语法格式
格式1 test 条件表达式
格式2 [ 条件表达式 ] #注意:中括号和表达式中间需要隔一个空格
或
[[ 条件表达式 ]]
文件测试指的是根据给定的路径名称,判断对应的是文件还是目录,或者判断文件是否可读、可写、可执行等。
文件测试的常见操作选项如下,使用时将测试对象放在操作选相关之后即可
-d:测试是否为目录(Directory)
-e:测试目录或文件是否存在(Exist)
-f:测试是否为文件(File)
-r:测试当前用户是否有权限读取(Read)
-w:测试当前用户是否有权限写入(Write)
-x:测试是否设置有可执行(Excute)权限
-b:测试是否为设备文件
-c:测试是否为字符设备文件
-s:测试岑在且文件大小为空
-L:测试是否为链接文件
执行条件测试操作以后,通过预定义变量$?可以获得测试命令的返回状态值,从而判断该条件是否成立
1.1 test命令测试
1.2 [ 条件表达式 ]测试
可结合echo、&&将是否存在结果输出出来
测试mnt目录下如果不存在kgc目录创建一个kgc目录
2.整数值比较
整数值比较指的是根据给定的两个整数值,判断第一个数与第二个数的关系,如是否大于、等于、小于第二个数。
整数值比较的常用操作选项如下,使用时将操作选项放在要比较的两个整数之间
-eq:第一个数等于(equal)第二个数
-ne:第一个数不等于(Not Equal)第二个数
-gt:第一个数大于(Greater Than)第二个数
-lt:第一个数小于(Lesser Than)第二个数
-le:第一个数小于或等于(Lesser or Equal)第二个数
-ge:第一个数大于或等于(Greater or Equal)第二个数
输出free -m中Mem项中的free,当空闲内存大于等于1024时输出内存充足
3.字符串比较
字符串比较通常用来检查用户输入、系统环境等是否满足条件,在提供交互式操作的Shell脚本中,也可用来判断用户输入的位置参数是否符合要求。
字符串比较常用操作选项如下:
=:第一个字符串与第二个字符串相同
!=:第一个字符串与第二个字符串不相同,其中"!"符号表示取反
-z:检查字符串是否为空(Zero),对于未定义或赋予空值的变量将视为空串
4.逻辑测试
逻辑测试指的是判断两个或多个条件之间的依赖关系。当系统任务取决于多个不同的条件时,根据这些条件是否同时成立或者有其中一个成立等情况,需要有一个测试的过程。
常用的逻辑测试操作如下,使用时放在不同的测试语句或命令之间
- &&:逻辑与,表示"而且",只有当前后两个条件都成立时,整个测试命令的返回值才为0(结果成立)。使用test命令测试时,“&&“可改为”-a”
- ||:逻辑或,表示"或者",只要前后两个条件中有一个成立,整个测试命令的返回值即为0(结果成立)。使用test命令测试时,“||“可改为”-o”
- !:逻辑否,表示"不",只有当指定的条件不成立时,整个测试命令的返回值才为0(结果成立)
若要判断当前Linux系统的内核版本是否大于3.4,可以执行一下操作。其中,内核版本号是通过uname和awk命令获得
二、if语句
1.单分支if语句
实际上使用"&&“和”||"逻辑测试已经可以完成简单的判断并执行响应的操作,但是当需要选择执行的命令语句较多时,这种方式将使执行代码显得很复杂,不好理解。而使用专门的if条件语句,可以更好的整理脚本结构,是的层次分明,清晰易懂
单分支if语句:对于单分支的选择结构,只有在"条件成立"时才会执行响应的代码,否则不执行任何操作
语法格式:
1)
if 条件测试操作
then
命令序列
fi #注意后面有个结尾,开头结尾要凑成一对否则会报语法错误
2)
if 条件测试操作;then
命令序列
fi
判断一个文件是否为脚本
2.双分支if语句
双分支if语句只是在单分支的基础上针对"条件不成立"的情况执行另一种操作,而不是"坐视不管"地不执行任何操作
判断目标主机是否存活,存活就打印is up,如果不存活就打印is down
判断输入的用户名是否存在,存在提示存在,不存在则创建用户并设置密码
判断当前登录用户是不是管理员
3.多分支if语句
与单分支。双分支if语句相比,多分支if语句的结构能够根据多个互斥的条件分别执行不通的操作
根据输入的考试分数来区分优秀、合格、不合格三档
4.嵌套if语句
判断是否启动
如果启动------输出已启动
如果没启动----判断是否安装—如果安装—启动
如果没安装----安装—如果安装成功—启动
如果安装不成功-----报错
三、case语句
case语句可以使脚本程序的结构更加清晰。层次分明,常用于服务的启动、重启、停止的脚本,有的服务不提供这种控制脚本,需要用case语句编写
case语句主要适用于一下情况:某个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列。这种情况与多分支的if语句非常像是,只不过if语句需要判断多个不通的条件,而case语句只是判断一个变量的不同取值
case 变量值 in
模式 1)
命令序列 1
;;
模式 2)
命令序列 1
;;
*)
默认命令序列
esac
case行尾必须为单词"in",每一模式必须以右括号")“结束。
双分号”;;“表示命令序列的结束
模式字符串中,可以用方括号表示一个连续的范围,如“[0-9]”;还可以用竖杠符号”|"表示或,如A|B
")"表示默认模式,其中的*相当于通配符
编写apache启动服务脚本
小练习
需求1.0
学校田径会,10分满分,8-10分(不包括8分)为优秀,6-8分(不包括6分)为合格 0-6分,不合格,请以交互时的方式,询问“请输入学生的田径比赛分数,来判定评级: ”
需求2.0
额外需求:评委被投诉后,现将女生、男生需要区分开来,女生7-10分为优秀,男生8-10分为优秀,女生的学号为1-10 男生的学号为11-20 ,请以交互时的方式询问“请输入参赛学员的学号(1-20):”,最后输出"该学生为男生/女生,成绩为优秀"
总结
条件测试包括文件测试、整数值比较、字符串比较和逻辑测试。
以及如何使用if语句和case语句。if语句又分为单分支、双分支以及多分支,单分支和多分支应用较少,一般嵌套if语句用的较多,case语句较if语句来说较简单。
边栏推荐
猜你喜欢
I ported GuiLite to STM32F4 board
正则表达式绕过
4.深度学习的几何解释与梯度的优化
高等代数_笔记_配方法标准化二次型
钢铁电商行业方案:钢铁工业产品全生命周期管理解决方案
基于WPF重复造轮子,写一款数据库文档管理工具(一)
Dialog manager in the fourth chapter: the dialog message loop
6.神经网络剖析
Record some bugs encountered - when mapstruct and lombok are used at the same time, the problem of data loss when converting entity classes
Auto.js Pro write the first script hello world
随机推荐
工程制图点的投影练习
Problems that need to be solved for interrupting the system
银微转债,洁特转债上市价格预测
解析,强势供应商的管理方法
计网试卷概念
C# WPF设备监控软件(经典)-上篇
vscode hide activity bar
高等代数_笔记_配方法标准化二次型
7.Keras开发简介
数值类型转换02
安装ambari
汇编书摘抄
Live | StarRocks technology insider: low base dictionary global optimization
AF-DNAT
【STM32】入门(四):外部中断-按键通过中断动作
索引创建、删除与使用
直播|StarRocks 技术内幕 :低基数全局字典优化
install ambari
关于#sql#的问题,如何解决?
WinForm(二):WinFrom中Main函数的入参和出参