shell的条件测试

shell 的条件测试

概述

条件测试是 shell 编程中非常重要的一个概念,它允许我们根据某个条件是否满足,来选择执行相应的任务。

条件测试的语法

shell 中的条件测试语法如下:

[ 条件表达式 ]

如果条件表达式为真,则返回 0,表示测试成功;如果条件表达式为假,则返回非 0 值,表示测试失败。

条件表达式

条件表达式可以是任何可以表示真值或假值的表达式,包括字符串比较、算术比较、文件测试、逻辑运算等。

字符串比较

字符串比较可以使用以下操作符:

操作符含义
-z strstr 为空时,返回真
-n strstr 不为空时,返回真
str1 = str2str1 等于 str2 时,返回真
str1 != str2str1 不等于 str2 时,返回真

drive_spreadsheet导出到 Google 表格

算术比较

算术比较可以使用以下操作符:

操作符含义
-eq等于
-ne不等于
-gt大于
-ge大于或等于
-lt小于
-le小于或等于

drive_spreadsheet导出到 Google 表格

文件测试

文件测试可以使用以下操作符:

操作符含义
-f filefile 存在且是一个普通文件时,返回真
-d filefile 存在且是一个目录时,返回真
-e filefile 存在时,返回真
-s filefile 存在且大小大于 0 时,返回真
-r filefile 存在且可读时,返回真
-w filefile 存在且可写时,返回真
-x filefile 存在且可执行时,返回真

drive_spreadsheet导出到 Google 表格

逻辑运算

逻辑运算可以使用以下操作符:

操作符含义
&&逻辑与,都为真时,返回真
\\
!逻辑非

drive_spreadsheet导出到 Google 表格

扩展知识

  • 条件测试的返回值可以被用作变量的值,或者作为判断语句的条件。
  • 条件测试可以嵌套使用,以实现更复杂的逻辑判断。
  • 条件测试可以与 case 选择语句配合使用,以实现更灵活的条件判断。

实验示例

以下是一些使用条件测试的实验示例:

判断变量是否为空

#!/bin/bashname="Josh"if [ -z "$name" ]; thenecho "变量为空"
elseecho "变量不为空"
fi

运行该脚本,将输出以下结果:

变量不为空

判断文件是否存在

#!/bin/bashfile="/etc/passwd"if [ -e "$file" ]; thenecho "文件存在"
elseecho "文件不存在"
fi

运行该脚本,将输出以下结果:

文件存在

判断字符串是否相等

#!/bin/bashstr1="hello"
str2="world"if [ "$str1" == "$str2" ]; thenecho "字符串相等"
elseecho "字符串不相等"
fi

运行该脚本,将输出以下结果:

字符串不相等

总结

条件测试是 shell 编程中非常重要的一个概念,它可以帮助我们实现复杂的逻辑判断。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/210695.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CentOS 7.9--离线安装python3.9.18+virtualenv-20.25.0

# 想在centos6.x 上安装新版本的python,但是担心在用系统的环境被破坏,所以需要安装python虚拟环境,然后就找到自用的aliyun主机先测试下离线安装,在用6.X环境是没有互联网的,必须需要离线安装。 1. 下载对应python源…

力扣解题之保姆教程:(1)两数之和(代码详解)

题目描述 给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。 假设每种输入只会对应一个答案。但是,数组中同一个元素在答案里不能重复出现。你可以按任意顺序返回…

Django模板

以下是一个简单的Django模板示例&#xff1a; <!DOCTYPE html> <html><head><title>{{ title }}</title></head><body><h1>{{ heading }}</h1><p>{{ content }}</p></body> </html>一、模板的…

波奇学Linux:父子进程和进程状态

vim编辑器&#xff0c;编写一个程序模拟进程 在vim中查看sleep函数 底行模式输入 写个Makefile自动运行波奇学Linux:yum和vim-CSDN博客 运行程序 PID和PPID 查看进程目录信息 实际有过滤出来有两个&#xff0c;一个进程本身一个是grep程序&#xff0c;通过 -v grep过滤走含gre…

新版Android Studio 正则表达式匹配代码注释,删除注释,删除全部注释,IntelliJ IDEA 正则表达式匹配代码注释

正则表达式匹配代码注释 完整表达式拼接Android Studio 搜索匹配【IntelliJ IDEA 也是一样的】 完整表达式拼接 (/*{1,2}[\s\S]?*/)|(//[\x{4e00}-\x{9fa5}].)|(<!-[\s\S]?–>)|(^\s\n)|(System.out.println.*) 表达式拆解&#xff0c;可以根据自己需求自由组合&#x…

Mybatis、Mybatis整合Spring的流程图

Mybatis 注意MapperProxy里面有invoke方法&#xff0c;当进到invoker方法会拿到 二、mybatis整合Spring 1、当我们的拿到的【Dao】其实就是【MapperProxy】&#xff0c;执行Dao的方法时&#xff0c;会被MapperProxy的【Invoke方法拦截】 2、图上已经标注了MapperProxy包含哪些…

力扣:200. 岛屿数量(Python3)

题目&#xff1a; 给你一个由 1&#xff08;陆地&#xff09;和 0&#xff08;水&#xff09;组成的的二维网格&#xff0c;请你计算网格中岛屿的数量。 岛屿总是被水包围&#xff0c;并且每座岛屿只能由水平方向和/或竖直方向上相邻的陆地连接形成。 此外&#xff0c;你可以假…

STM32-TIM定时器中断

目录 一、TIM&#xff08;Timer&#xff09;定时器简介 二、定时器类型 2.1基本定时器结构 2.2通用定时器结构 2.3高级定时器结构 三、定时中断基本结构 四、时序图分析 4.1 预分频器时序 4.2 计数器时序 4.3 计数器无预装时序&#xff08;无影子寄存器&#xff09; …

C#的线程技术及操作

每个正在操作系统上运行的应用程序都是一个进程&#xff0c;一个进程可以包括一个或多个线程。线程是操作系统分配处理器时间的基本单元&#xff0c;在进程中可以有多个线程同时执行代码。每个线程都维护异常处理程序、调度优先级和一组系统用于在调度该线程前保存线程上下文的…

PyQt6 水平布局Horizontal Layout (QHBoxLayout)

锋哥原创的PyQt6视频教程&#xff1a; 2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计41条视频&#xff0c;包括&#xff1a;2024版 PyQt6 Python桌面开发 视频教程(无废话版…

[足式机器人]Part2 Dr. CAN学习笔记-自动控制原理Ch1-1开环系统与闭环系统Open/Closed Loop System

本文仅供学习使用 本文参考&#xff1a; B站&#xff1a;DR_CAN Dr. CAN学习笔记-自动控制原理Ch1-1开环系统与闭环系统Open/Closed Loop System EG1: 烧水与控温水壶EG2: 蓄水与最终水位闭环控制系统 EG1: 烧水与控温水壶 EG2: 蓄水与最终水位 h ˙ q i n A − g h A R \dot{…

阿里云SLS采集jvm日志

一、背景 java应用部署在阿里云的k8s容器里&#xff0c;采集其日志的需求则是一个不可缺少的。而不同公司的jvm日志会存在很大的差异&#xff0c;所以本文仅以我的实际情况作一个示例&#xff0c;仅供有需要采集jvm日志的同学们一个参考。 我们打印的Jvm日志格式见下&#xf…

【干货分享】KingIOServer与三菱PLC的通讯的应用案例

哈喽&#xff0c;大家好&#xff0c;我是雷工&#xff01; 最近一个项目涉及用KingIOServer采集三菱PLC数据&#xff0c;特记录通讯过程方便备忘。 一、版本说明&#xff1a; 1、KingIOServer版本&#xff1a;3.7SP2 2、PLC型号&#xff1a;Q03UDV 和Q03UDE自带以太网网口。…

Vue笔记(五)路由进阶

导航守卫 vue-router提供导航守卫主要通过跳转或**取消*的方式守卫导航。有很多方式植入路由导航中&#xff1a;全局的、单个路由独享的&#xff0c;或者组件级的。 全局前置守卫&#xff1a;beforeEach。 每个守卫接收两个参数&#xff1a; to&#xff1a;将要进入的目标fr…

VUE宝典之el-dialog使用

文章目录 &#x1f341;前言&#x1f341;el-dialog简介&#x1f341;el-dialog属性&#x1f341;el-dialog示例&#x1f341;父子组件值传递示例 &#x1f341;前言 el-dialog是Element UI库中的一个重要组件&#xff0c;用于在Vue应用程序中创建弹出框。它提供了一组实用的属…

【Dubbo3云原生微服务开发实战】「Dubbo前奏导学」 RPC服务的底层原理和实现

RPC服务 RPC服务介绍RPC通信模式RPC架构组成RPC技术要点RPC通信技术选项分析RPC实战开发6大基础组件基础组件之Guava基础组件之Hutools基础组件之ReflectionASM基础组件之FastJSON/FastJSON2基础组件之FST相比FastJSON的优势 基础组件之Commons-Codec RPC框架层面选项分析RPC组…

持续集成交付CICD:Jenkins配置Nexus制品上传流水线

目录 一、实验 1.Jenkins配置制品上传流水线 二、问题 1.上传制品显示名称有误 一、实验 1.Jenkins配置制品上传流水线 (1) 新建流水线项目 &#xff08;2&#xff09;描述 &#xff08;3&#xff09;添加参数 &#xff08;4&#xff09;查看构建首页 &#xff08;5&…

实现简易的一对一用户聊天

服务端 package 一对一用户;import java.awt.BorderLayout; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; import java.net.ServerSocket; import java.net.Socket; import java.util.Vector…

Vue.js - 界面设计工具和UI组件库

ViewDesign ViewDesign是一款开源的在线设计工具&#xff0c;它主要提供了一种可视化的界面设计方法&#xff0c;可以帮助设计师和开发人员更高效地完成界面设计和开发工作。 ViewDesign的特点是支持在线协作&#xff0c;可以多人同时进行设计&#xff0c;提高了设计效率&…

Redis课程:黑马点评

文章目录 基于Redis实现短信登录商户查询缓存优惠券秒杀一人一单 分布式锁Redis分布式锁误删情况说明解决Redis分布式锁误删问题使用lua脚本解决分布式锁的原子性问题 基于阻塞队列实现秒杀优化Redis消息队列优化秒杀业务达人探店参考 本文是根据黑马程序员的视频课程 黑马程序…