Shell编程——条件测试(五)

在shell编程中,if语句本身不执行任何判断,它实际上接受一个程序作为参数,然后执行这个程序,并依据这个程序的返回值判断是否执行相应的语句。

程序的返回值是0,则为真,反之则为假

目录

·test命令(用于判断表达式的真假)

和test相同作用的方括号[ 也可以进行条件测试

·test和[命令可以对三类表达式进行测试

1、字符串比较

2、文件测试

 3、数字比较

·复合表达式(!、-a、-o)


·test命令(用于判断表达式的真假)

语法:

test expr

例子:

用test命令判断字符串变量password是否等于“123456”

test "password" = "123456"

 如果两者相等,test命令就返回值0,反之则返回1.

和test相同作用的方括号[ 也可以进行条件测试

语法:

[ expr ] #符号两边的空格不可以省略

示例: 

[ "password" = "123456" ]

所以 test "password" = "123456" 等同于 [ "password" = "123456" ]

注:空格在shell这个命令解释器中用于分隔命令和传递给它的参数,或者用于分隔命令的两个参数

·test和[命令可以对三类表达式进行测试

1、字符串比较

-z str当字符串str长度为0时,返回真
-n str当字符串str长度大于0时,返回真
str1 = str2当字符串str1长度和字符串str2长度相等时,返回真
str1 != str2当字符串str1长度和字符串str2长度不相等时,返回真

 

注:shell对大小写敏感

2、文件测试

用于文件测试的选项
-x pathname当pathname指定的文件或目录设置了执行权限时,返回真
-w pathname当pathname指定的文件或目录设置了权限时,返回真
-r pathname当pathname指定的文件或目录设置了权限时,返回真
-e pathname当pathname指定的文件或目录设置了存在时,返回真
-o pathname当pathname指定的文件或目录被当前进程拥有时,返回真
-d pathname当pathname是一个目录时,返回真
-s file当file存在且大小为0时,返回真
-f file当file是常规文件时,返回真;(不包括符号链接、目录、管道等)
-b file当file是块设备文件时,返回真
-c file当file是字符文件时,返回真
-h file当file是符号链接时,返回真
-p file当file是管道时,返回真

示例:

#! /bin/bashif [ -x /home/fengyun/test.sh ]
thenecho "the test.sh can be execute"
fi

 3、数字比较

test和[命令在数字比方面只能用来比较整数(包括负整数和整数)

语法:

test int1 option int2#或者[ int1 option int2 ]

用于数字比较的option
-eq(全拼:equal)相等为真
-ne(全拼:not equal)不相等为真
-lt(全拼:lower than)如果int1 小于 int2,则为真
-gt(全拼:greater than)如果int1 大于 int2,则为真
-le(全拼:lower or equal)如果int1 小于或等于 int2,则为真
-ge(全拼:greater  or equal)如果int1 大于或等于 int2,则为真

·复合表达式(!、-a、-o)

expr运算,当expr为假时返回真
expr1 -a expr2运算,同为真才返回真
expr1 -o expr2运算,有一个为真则返回真

 示例:如果用户输入的参数对应的文件存在,且/usr/bin/vi文件可执行,则执行相应的语句

#! /bin/bashif [ -f $@ -a -x /usr/bin/vi ]
then cp $@ $@.bakvi $@
fi

补充:shell的条件操作“&&”和“||”可以用来代替test和[命令中的-a和-o;

上面的示例可以写成

#! /bin/bashif [ -f $@ ] && [ -x /usr/bin/vi ]
then cp $@ $@.bakvi $@
fi

注:“&&”或者“||”连接的是两条[(或者test)命令,而-a、-o操作符是在同一条[( 或者test)命令中使用的

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

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

相关文章

AIGC笔记--GAN模型的搭建

1--GAN模型的基本概念 经典GAN模型先训练辨别器,再训练生成器; 训练辨别器时,使用分别使用噪声图片和真实图片作为辨别器的输入,噪声图片对应的训练标签为0,真实图片的训练标签为1,使辨别器作二分类任务来学…

YOLOv8-Openvino-ByteTrack【CPU】

YOLOv5-Openvino和ONNXRuntime推理【CPU】 YOLOv6-Openvino和ONNXRuntime推理【CPU】 YOLOv8-Openvino和ONNXRuntime推理【CPU】 YOLOv9-Openvino和ONNXRuntime推理【CPU】 注:YOLOv8和YOLOv9代码内容基本一致! 全部代码Github:https://gith…

【AutoSar网络管理】唤醒ECU:有效外部网管报文

本专栏将为您提供: Autosar网络管理介绍,包括:状态迁移、状态行为、状态表现、切换条件、时间参数、消息类型等。DUT模拟节点介绍,包括:设计思路、代码展示、编写须知等。测试用例介绍,包括:测试内容、测试步骤、期望结果等。测试脚本介绍,包括:编写思路、代码展示、脚…

阿里云服务器如何通过Java SDK创建ECS实例?

通过Java SDK创建ECS实例的步骤可以概括为以下几个方面: 配置Java SDK环境:在使用Java SDK创建ECS实例前,需要配置好Java SDK环境,并在Maven项目的pom.xml 文件中添加阿里云核心库aliyun。这一步骤是为了确保项目能够正确地使用阿…

对于网络IO的理解

网络IO理解 首先服务端将本机地址和端口bind在listensock上,再用listen()去将listensock套接字设置为listen状态,然后调用accept,进入阻塞状态。如果此时有客户端请求连接,就是第一次握手的开始。 客户端会先调用connect来申请连…

BUUCTF crypto做题记录(13)新手向

一、[MRCTF2020]vigenere 这是一道维吉尼亚密码,但由于不知道密钥,所以我们需要采用爆破的方式。Vigenere Solver | guballa.de 答案:flag{vigenere_crypto_crack_man} 二、[MRCTF2020]keyboard 之前做过一个类似的题目,用九宫格…

C#入门详解_05_C#语言基本元素概览,初识类型、变量与方法,算法简介

本篇对C#语言基本元素概览,初识类型、变量与方法,算法进行简介。 文章目录 1. 构成C#语言的基本元素1.1 关键字(Keyword)1.2 操作符(Operartor)/运算符1.3 标识符(ldentifier )1.3.1 什么是合法的标识符1.4 标点符号1.5 文本(字面值 )1.6 注释与空白2. 初识类型、变量和方法…

97 spring 中的泛型类型注入

前言 呵呵 同样是 最近同事碰到的一个问题 他不太懂 英语, 看到的说明是 缺少一个 RedisTemplate 的实例, 但是找到了一个 RedisTemplate 的实例 呵呵 和我这里 spring 版本似乎是不太一样, 错误信息 有一些差异 以下环境基于 jdk8 spring-5.0.4-RELEASE 测试用例 BeanCon…

day50(vueJS)TypeScript(概念、优势、静态与动态类型、类型约束以及类型注解)

TypeScript介绍 概念优势静态类型与动态类型类型约束 / 类型注解常规类型非常规类型数组类型对象类型万能类型函数类型使用reactive和ref的类型约束父对子传值时的类型约束 概念 它是 JavaScript 的一个超集,支持 ECMAScript 6 标准,由微软公司开发的自由…

MySQL 新增用户及权限分配

场景: 给MySQL新增一个用户,并且该用户登陆后只能查看和操作有权限的数据库 1、创建用户user_luka, 密码pw123456,%表示所有主机,或者用户连接 MySQL 时所用主机IP,如果在创建的过程中,只给出了用户名&am…

高效备考一级数据分析师考试《CDA Level I 实操训练营》3月30日开课!

曾经报名了考试,买了教程辅导书,却因为各种原因没有坚持学习,这样的经历可能让你感到沮丧和失望。但是,失败并不代表终结,而是迈向成功的必经之路。为了帮助大家能够快速学习考试相关知识,特别为CDA LEVEL …

transformer--解码器

在编码器中实现了编码器的各种组件,其实解码器中使用的也是这些组件,如下图: 解码器组成部分: 由N个解码器层堆叠而成每个解码器层由三个子层连接结构组成第一个子层连接结构包括一个多头自注意力子层和规范化层以及一个残差连接第二个子层连…

HarmonyOS4.0入门学习需要学习哪些知识点呢?

HarmonyOS4.0入门学习需要学习哪些知识点?我们需要学习以下知识点,看看你都会吗? 01、HarmonyOS介绍 开发环境搭建 DevEco详解 目录介绍介绍 代码分析 02、HarmonyOS模拟器调试、真机调试 03、ArkTS页面布局 数据类型 条件判断 数组ForEach循环遍历 Lis…

小巧且强大,一键批量操作谁不爱?

软件简介: 软件【下载地址】获取方式见文末。注:推荐使用,更贴合此安装方法! 两款Office批量打印工具展现了优秀的人性化设计:其界面清晰、操作简便。这些工具支持Word、Excel、PPT等多种文档格式进行批量打印&#…

VMware虚拟机安装linux教程

CentOS7下载 下载 (centos.org)https://www.centos.org/download/新建虚拟机 选择自定义安装 这里要注意兼容性,如果是VMware12创建的虚拟机复制到VM11、10或者更低的版本会出现一不兼容的现象。如果是用VMware10创建的虚拟机在VMware12中打开则不会出现兼容性问题…

洛谷: P1754 球迷购票问题

思路: 记忆化搜索。和洛谷上那道括号匹配的题几乎是一样的。 x是当前剩余50的数量&#xff0c;y是剩余100的数量。 纯暴力三个点超时&#xff0c;所以每次DFS完了&#xff0c;把当前找到的方式数量记录下来&#xff0c;不再重复的去DFS。 代码: #include <bits/stdc.h&g…

vue中使用echarts实现人体动态图

最近一直处于开发大屏的项目&#xff0c;在开发中遇到了一个小知识点&#xff0c;在大屏中如何实现人体动态图。然后看了下echarts官方文档&#xff0c;根据文档中的示例调整出来自己想要的效果。 根据文档上发现 series 中 type 类型设置为 象形柱形图&#xff0c;象形柱图是…

SpringCloud之Nacos入门与实战系列

目录 一、Nacos介绍 1.1、配置中心和注册中心的概念 1.2 Nacos 优点 二、Nacos的使用 2.1 以单机模式启动Nacos 2.2 Nacos部署方式介绍 2.3 配置数据源 2.4 开启控制台权限登录 三、配置中心的使用 3.1 创建配置信息 3.2 SpringBoot使用配置中心 四、注册中心的使用 4…

android 使用协程CoroutineScope 实现定时器

满足延迟执行、立即执行&#xff0c;每次任务间隔时长&#xff0c;总时长的任务 使用1 class TimeViewModel:Viewmodel(){//测试延迟5秒开始执行任务&#xff0c;然后每隔1秒执行1次&#xff0c;总执行时间60秒fun testTime(){var startTime System.currentTimeMillis()log(…

图书推荐|Word文稿之美

让你的文档从平凡到出众&#xff01; 本书内容 《Word文稿之美》是一本全面介绍Word排版技巧和应用的实用指南。从初步认识数字排版到高效利用模板、图文配置和表格与图表的排版技巧&#xff0c;再到快速修正错误和保护文件&#xff0c;全面系统地讲解数字排版的技术和能力&…