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,一经查实,立即删除!

相关文章

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…

对于网络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 之前做过一个类似的题目,用九宫格…

97 spring 中的泛型类型注入

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

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

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

transformer--解码器

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

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

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

VMware虚拟机安装linux教程

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

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

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

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…

图书推荐|Word文稿之美

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

基于Docker部署本地ChatGPT环境

基于Docker部署本地ChatGPT环境 一、拉取镜像 docker pull pengzhile/pandora二、运行镜像 docker run -e PANDORA_CLOUDcloud -e PANDORA_SERVER0.0.0.0:8899 -p 8899:8899 -d pengzhile/pandora三、查看容器是否启动成功 docker ps四、登录 http://IP:8899 这里有两种方…

ssm+springboot音乐播放器网站mybatis+jsp

测试流程 (1) 登录系统、填写用户名、密码选择角色,主要内容:进行权限控制。 (2) 用户查看音乐信息、音乐资讯功能,主要是测试系统实用性、方便性。 (3) 信息修…

【C++】类和对象之初始化列表与static成员

个人主页 : zxctscl 文章封面来自:艺术家–贤海林 如有转载请先通知 文章目录 1. 前言2. 再谈构造函数2.1 构造函数体赋值2.2 初始化列表2.3 explicit关键字 3. static成员3.1 概念3.2 特性 1. 前言 在前面的博客中已经分享有关构造函数 【C】构造函数和…

9.WEB渗透测试-Linux基础知识-Linux用户权限管理(上)

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于: 易锦网校会员专享课 上一个内容:8.WEB渗透测试-Linux基础知识-Linux基础操作(二)-CSDN博客 用户管…

uniapp实现进度条组件

首先&#xff0c;在uniapp项目中创建一个自定义组件&#xff0c;可以命名为Progress.vue。在Progress.vue中&#xff0c;编写如下代码&#xff1a; <template><view class"progress"><view class"progress-bar" :style"{width: progr…

缓存淘汰策略看完这篇就够了

LFU 缓存淘汰算法 LFU 是 Least Frequently Used 的缩写&#xff0c;即 最少使用 缓存淘汰算法。LFU算法根据数据项在缓存中的访问频率来决定淘汰哪些数据项。访问频率越高 的数据项被认为是更重要的&#xff0c;访问频率越低 的数据项被认为是更不重要的。 LFU算法的具体工作原…

Kali Linux 2024.1

Kali Linux 2024.1刚刚发布&#xff0c;标志着这个备受欢迎的安全重点Linux发行版在今年的首次重大更新。以其先进的渗透测试和安全审计功能而闻名&#xff0c;它是安全专业人员和爱好者的首选工具。 Kali 2024.1 亮点 本次发布由 Linux 内核 6.6 提供支持&#xff0c;突出了…

C语言qsort函数介绍

前言 学到了函数指针&#xff0c;那这篇博客我们可以根据函数指针&#xff0c;了解一个函数qsort的应用与模拟实现 欢迎关注个人主页&#xff1a;小张同学zkf 若有疑问 评论区见 目录 1.回调函数 2.qsort函数使用 3.qsort模拟实现 1.回调函数 讲这个东西之前我们来认识一下…

mq基础类设计

消息队列就是把阻塞队列这样的数据结构单独提取成一个程序独立进行部署。——>实现生产者消费者模型。 但是阻塞队列是在一个进程内部进行的&#xff1b; 消息队列是在进程与进程之间进行实现的&#xff0c; 解耦合&#xff1a;就是在分布式系统中&#xff0c;A服务器调用B…