Shell脚本应用——条件测试操作

前言:在简单的shell脚本程序中,各条语句将按先后顺序依次执行,从而实现批处理的自动化过程,这就使得脚本过于机械化,不够“智能”,难以处理更加灵活的系统任务。

下面让我们一起了解如何进行条件测试操作,并通过正确使用if语句,使shell脚本具有一定的“判断”能力,以根据不同的条件来完成不同的管理任务。

条件测试操作

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

Shell环境根据命令执行后的返回状态值($?)来判断是否执行成功,当返回值为0时表示成功,否则(非0值)表示失败或异常。

这两种方式的作用完全相同,但通常后一种形式更为常用(按照个人习惯吧)。需要注意的是,用方括号“[ ]”测试格式时,方括号“[ ]”左右与条件表达式之间需要至少一个空格进行分隔,否则会报错。

根据需要测试的条件类别不同,条件表达式也不同。常用的条件操作包括:文件测试、整数值比较、字符串比较、以及针对多个条件的逻辑测试。

1.文件测试

文件测试指的是根据给定的路径名称,判断对应的是文件还是目录,或者判断文件是否可读、可写、可执行等。

常见的操作选项如下,使用时将测试对象放在操作选项之后即可。

-d:测试是否为目录(Directory)-f:测试是否为文件(File)-e:测试目录或文件是否存在(Exist)-r:测试当前用户是否有读的权限(Read)-w:测试当前用户是否有写入权限(Write)-x:测试是否有可执行权限(Excute)示例 宝宝起名网

通过“$?”返回的值可以判断前一步的条件测试结果,但输出的结果也并不是很直观。为了可以更直观的查看测试结果,可以结合命令分隔符“&&”和echo命令一起使用,其中“&&”符号表示“而且”的关系,只有当前面的命令执行成功后才会执行后面的命令,否则后面的命令将会被忽略。

2.数值比较

数值比较指的是根据给定的两个整数值,判断第一个数与第二个数的关系,如第一个数是否大于、等于、小于第二个数。

整数值比较的常用操作选项如下,使用时将操作选项放在要比较的两个整数之间。

-eq:第一个数等于(Equal)第二个数-ne:第一个数不等于(Not Equal)第二个数-gt:第一个数大于(Greater Than)第二个数-lt:第一个数小于(Lesser Than)第二个数-le:第一个数小于等于(Lesser or Equal)第二个数-ge:第一个数大于等于(Greater or Equal)第二个数整数值比较在shell脚本编写中的应用较多。例如,用来判断已登录用户数量、开启进程数、磁盘使用率是否超标,以及软件版本是否符合要求等。实际使用时,往往通过变量引用、命令替换等方式来获取一个数值。

示例:判断当前已登录的用户数,当超过五个时输出“Too many”。如下图:

示例:判断物理内存(Mem)当前的磁盘缓存(buff/cache)大小,当低于1024MB时输出具体数值。如下图:

3.字符串比较

字符串比较通常用来检查用户输入、系统环境等是否满足条件,在提供交互式操作的shell脚本中,也可以用来判断用户输入的位置参数是否符合要求。

字符串比较的常用操作选项如下:

-z:检查字符串是否为空(Zero),对于未定义或赋予空值的变量将视为空串。-n:测试变量的值不为空,与-z相反=:第一个字符串与第二个字符串相同!=:第一个字符串与第二个字符串不相同,其中“!”表示取反示例:判断当前系统的语言环境,若不是“en.US”时输出提示信息“Not en.US”。如下图:

示例:在脚本应用中,经常需要用户输入“yes或no”来确认某个任务。这时需要用到确认交互的过程,通过判断用户输入的内容来执行下一步操作。此示例只是其中一个简单的过程。如下图:

关于read命令的用法可以点击查看Linux——Shell脚本中自定义变量的应用(基础)2

4.逻辑测试(与、或、非)

逻辑测试指的是判断两个或多个条件之间的依赖关系。当系统任务取决于多个不同的条件时,根据这些条件是否同时成立或者只要其中一个成立等情况,需要有一个测试的过程。

逻辑测试操作可分为表达式与表达式之间的逻辑、表达式内部逻辑两种,如下:

表达式之间逻辑:&&、||、!

表达式内部逻辑:-a、-o、!

&&(-a):逻辑与,表示“而且”,只有当两个条件都成立时,整个测试命令的返回值才为0(结果成立)。||(-o):逻辑或,表示“或者”,只要两个条件中有一个成立,整个测试命令的返回值就为0(结果成立)。!:逻辑否,表示“不”,只有当指定的条件不成立时,整个测试命令的返回值才为0(结果成立)在上述的逻辑测试的操作选项中,在实际应用中也用于间隔不同的命令操作,其作用也是相似的。如“make && make install”的编译安装操作。

测试过程中用shell的地方_Shell脚本应用——条件测试操作相关推荐

  1. 测试过程中用shell的地方_软件测试之学习shell流程控制结构

    条件表达式概述: 在各种条件结构和流程控制结构进行的各种判断,然后根据不同条件执行不同的操作 格式为:[ 条件表达式 ],比如:[ 1 -eq 2 ] && echo "tu ...

  2. shell条件测试操作 if分支 for循环 while 循环

    目录 条件测试操作 条件测试的基本用法: 字符串条件测试: 逻辑组合 数字的条件测试: 编写一个脚本: 对文件进行测试: if判断语句 单分支 双分支 多分支 编写一个脚本: 编写一个脚本: for循 ...

  3. shell python比较_shell中的条件判断以及与python中的对比

    shell中比如比较字符串.判断文件是否存在及是否可读等,通常用"[]"来表示条件测试. 注意:这里的空格很重要.要确保方括号的空格. if ....; then          ...

  4. shell mysql并发_shell脚本中的多进程并发处理

    在前面的篇章里面,我们已经介绍了常见的各种shell命令操作.然而,在实际工作中,我们经常会遇到多种任务需要在一定时间内都解决掉.如果这些任务是相互独立的,即不存在先后执行关系,那么我们完全可以让它们 ...

  5. shell sleep毫秒_Shell脚本之date、sleep、usleep命令

    1.1 date命令 date用于获取和设置操作系统的时间,还有hwclock是获取硬件时间. date有个选项"-d",可以用来描述获取什么时候的时间,描述的方式非常开放,但不能 ...

  6. shell蚂蚁森林_Shell脚本实现光速联自动提速

    宽带提速脚本, 具体使用方法见码云地址 光速联 https://www.fangyb.com/ 码云地址 https://gitee.com/caixiaodao/GuangSuLian [Asm] ...

  7. shell条件测试操作

    步骤一:条件测试的基本用法 1)语法格式 使用"test 表达式"或者[ 表达式 ]都可以,表达式两边至少要留一个空格. 条件测试操作本身不显示出任何信息.测试的条件是否成立主要体 ...

  8. shell支持loop吗_Shell脚本case语句和loop语句,与,循环

    case分支语句 case语句可以使用脚本程序的结构更加清晰,层次分明. case语句的结构 case语句主要适用于以下情况:莫个变量存在多种取值,需要对其中的每一种取值分别执行不同的命令序列.跟if ...

  9. birt脚本for循环_Shell脚本应用 – for、while循环语句

    一.for循环语句 在实际工作中,经常会遇到某项任务需要多次执行的情况,而每次执行时仅仅是处理的对象不一样,其他命令相同.例如:根据通讯录中的姓名列表创建系统账号等情况. 当面对各种列表重复工作任务时 ...

最新文章

  1. 51单片机串口通信(字符串接收和发送)
  2. sharp扫地机器人讲话_扫地机机器人,智能扫地机器人推荐
  3. Windows Mobile中实现统计图形的绘制(C#版,柱状图)
  4. Openstack dnsmasq配置域名解析
  5. LeetCode 658. 找到 K 个最接近的元素(二分查找)
  6. 稀疏大模型简述:从MoE、Sparse Attention到GLaM
  7. 01-05 Linux常用命令-性能统计
  8. 安卓java游戏模拟器_java游戏模拟器安卓版下载
  9. C语言开辟空间和C++ 开辟空间
  10. 纯干货:微软漏洞中国第一人黄正——如何用正确姿势挖掘浏览器漏洞(附完整 PPT)
  11. 网络安全学习--002--windows基础知识
  12. python中sys模块下载_怎样进行python sys模块安装及使用
  13. c语言数据结构实训报告总结,数据结构实训心得
  14. 父债子偿有法可依吗?可法院却对这个案子说:不!
  15. 推荐11个值得关注的网络安全公众号(年度精选)
  16. adb 判断imei_adb 获取imei
  17. 登陆界面改怎么测试,分析,测试用例
  18. JDBC从入门到精通
  19. (*^__^*) 感恩相伴,祝福相随 (*^__^*)
  20. 广发证券电脑linux,广发证券易淘金电脑PC官方版

热门文章

  1. 目标资产主动信息收集
  2. HTML中的乱码问题
  3. 独立分量分析(Independent Component Analysis)
  4. linux mutt安装配置_Linux部署msmtp+mutt发送邮件功能
  5. javaweb基于JSP+Servlet开发人力资源员工档案管理系统源码+论文+视频讲解 课程设计 毕业设计
  6. 读书百客:《十五夜望月寄杜郎中》鉴赏
  7. Java 项目正向代理配置
  8. 写一个专家抽取的算法
  9. [原]一屋不扫,何以扫天下
  10. 什么是跨域问题?跨域问题怎么解决?