首页 > 系统相关 >shell编程之条件语句(shell脚本)

shell编程之条件语句(shell脚本)

时间:2024-06-23 11:00:38浏览次数:15  
标签:语句 shell 是否 编程 测试 条件 返回值 操作 目录

条件测试操作

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

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

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

文件测试

文件测试指的是根据给定的路径名称,判断对应的是文件还是目录,或则判断文件是否可读,可写,可执行等。文件测试的常用操作选型如下,使用时将测试对方放在操作选项之后即可。

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

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

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

-r:测试当前用户是否有执行读取(Read)

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

-x:测试是否设置有可执行(Excute)权限

执行条件测试操作以后,通过预定义变量$?可以获得测试命令的返回状态值,从而判断该条件是否成立。例如,执行以下操作可测试目录/media/是否存在,如果返回值$?为0,表示存在此目录,否则表示不存在或则存在但不是目录。

【-d /media/】

echo $? (查看前一命令的返回值)

0 (返回0表示条件成立)

若测试的条件不成立,则测试操作的返回值将不为0(通常为1)。例如,执行以下操作展示了测试不存在目录的情况。

{-d /media/cdrom/server}

echo $? (查看前一命令的返回值)

1 (返回1表示条件不成立)

通过查看变量$?的值可以判断前一步的条件测试结果,但是操作比较烦琐,输出结果也并不是很直观。为了更直观地查看测试结果,可以结合命令分隔符“&&”和echo命令一起使用,当条件成立时直接输出“YES”。其中,“&&”符号表示“而且”的关系,只有当前面的命令执行成功后才会执行后面的命令,否则后面的命令将会被忽略。例如,上述目录测试操作可以改写如下。

{-d /media/cdrom/server}&&echo 无输出表示该目录不存在

{-d /media/cdrom}&&echo 输出“YES”表示该目录存在

YES

整数值比较:

整数值比较的是根据给定的两个整数值,判断第一个数与第二个数的关系,如是否大于,等于,小于第二个数。整数值比较的常用操作选项如下,使用时将操作选型放在要比较的两个整数之间。

-eq:第一个数等于(Equal)第二个数。

-ne:第一个数不等于(Not Equal)第二个数。 等效于(!=)

标签:语句,shell,是否,编程,测试,条件,返回值,操作,目录
From: https://blog.csdn.net/2401_85084312/article/details/139866256

相关文章

  • 【Java基础】 网络编程
    在数字化时代,网络编程已成为软件开发中的重要组成部分。无论是构建分布式系统、实现实时通讯还是进行Web开发,都需要深入了解网络编程的基础知识和技术。这种技能不仅在IT领域至关重要,还在非计算机行业的岗位中发挥着越来越重要的作用。Java网络编程是指用Java语言编写的在多个......
  • Python编程学习进阶书籍
    1、Python编程从入门到实践第2版本书内容分为“基础知识”和“项目”两部分。读完本书,读者不仅能快速掌握编程基础知识,还能编写出解决实际问题的代码并开发复杂的项目。第2版沿袭第1版讲解清晰透彻、循序渐进的特点,并全面升级。第一部分“基础知识”新增SublimeText、f字符......
  • Java高手的30k之路|面试宝典|精通网络编程
    基础概念OSI和TCP/IP在高级Java开发面试中,关于OSI模型和TCP/IP模型的理解是非常重要的。以下是这两个网络模型及其各层功能的详细解释:OSI模型OSI(OpenSystemsInterconnection)模型是一个概念性框架,用于理解和设计网络通信的不同层次。它分为七层,每层都有特定的功能。......
  • jmeter中beanshell-regex用法-prev.getTime()
    jmeter-beanshellPostprocessor,实现需求:判断响应时间大于10ms的响应,并记录想要的响应字段,比如流水号,注册的用户名密码等代码如下:importjava.util.regex.Matcher;importjava.util.regex.Pattern;//这里引入判断响应时间的代码,如判断响应时间超过10ms,则记录流水号longresp......
  • 20240622-PowerShell5和PowerShell7在windows terminal中无法切换
    今天安装powertoys小工具commandNotFound的时候,提示要求powershell版本是7,而当前powershell版本是5,如下。但是powertoys中显示powershell7已经安装,如下图。主要问题在于powershell5的程序名是powershell.exe,而powershell7的程序名是pwsh.exe.windowsterminal每个选项卡默......
  • 【C#进阶】多线程和异步编程_2024-06-22
    关于多线程和异步编程简单来说,就是多线程并行执行任务提速,异步编程等待不浪费资源,并发集合确保数据访问安全,三者合力提升程序效率与反应能力。1.理解线程想象一下,你在厨房做饭,同时需要洗菜、切菜、炒菜。如果你一个人来做,就需要在这些任务之间来回切换,这很慢。但如果请几个朋友......
  • windows powershell 如何读取大文件前10行
    在WindowsPowerShell中,可以使用Get-Contentcmdlet来读取文件内容。对于大文件,直接使用Get-Content会加载整个文件,这可能会导致性能问题或内存溢出。为了避免这样的问题,我们可以通过指定读取的行数来获取文件的前几行。以下是一些常见的方法来读取大文件的前10行:Get-Cont......
  • Perl编程探索:深入理解数组变量
    Perl语言以其在文本处理和系统管理任务中的强大能力而受到广泛欢迎。在Perl中,数组是处理多个值集合的一种关键数据结构。本文将深入探讨Perl中的数组变量,包括它们的声明、初始化、访问和操作。Perl数组的基本概念在Perl中,数组可以用来存储一系列的值,这些值可以是数字、字......
  • Shell编程规范与变量
    1.1Shel脚本概述        在一些复杂的Linux维护工作中,大量重复性的输入和交互操作不仅费时费力,而且容易出错,而编写一个恰到好处的Shel脚本程序,可以批量处理、自动化地完成一系列维护任务,大大减轻管理员的负担。1.1.1Shell的作用        Linux系统......
  • 常微分方程算法之编程示例一(欧拉法)
    目录一、研究问题二、C++代码三、计算结果一、研究问题    前面几节内容介绍了常微分方程有限差分格式的推导。为加强对本专栏知识的理解,从本节开始,我们补充一些具体算例及相应的编程。    欧拉法的原理及推导请参考:常微分方程算法之欧拉法(Euler)_欧拉......