shell条件测试与条件测试操作符

shell条件测试与条件测试操作符

      • 条件测试
      • 变量#?
      • test与条件测试语句
      • 方括号测试表达式
      • 字符串测试操作符
      • 逻辑测试操作符
      • 整数测试操作符
      • 双小括号的整数测试操作符与含义
      • 文件测试操作符
      • 条件测试举例

条件测试

条件测试是可以根据某个特定条件是否满足,来选择执行相应的任务。

变量#?

任何一种测试中,都要有退出状态(返回值),退出状态为0表示命令成功或表达式为真,非0则表示命令失败或表达式为假。状态变量S?中保存了命令退出状态的值,

查看用户是否在/etc/passwd中,0表示真,存在,1表示假,不存在

[root@localhost tmp]# grep $USER /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
[root@localhost tmp]# echo $?
0
[root@localhost tmp]# grep josh /etc/passwd;echo $?
1

test与条件测试语句

test 命令在 shell 中主要用于条件测试,如果条件为真,则返回一个0值。如果表达式不为真,则返回一个大于 0的值,也可以将其称为假值。
test 命令支持测试的范围包括:字符串比较、算术比较、文件是否存在、文件属性和类型判断等。例如,判断文件是否为空、文件是否存在、是否是目录、变量是否大于3、字符串是否等于ivey、字符串是否为空等。

[root@localhost tmp]# x=8;y=12
[root@localhost tmp]# test $x -gt $y 	#gt表示大于
[root@localhost tmp]# echo $?
1[root@localhost tmp]# test $x -lt $y	#lt表示小于
[root@localhost tmp]# echo $?
0

方括号测试表达式

方括号代替test,方括号前后都留空格

[root@localhost tmp]# x=8;y=12
[root@localhost tmp]# [ $x -gt $y ];echo $?
1
[root@localhost tmp]# [ $x -lt $y ];echo $?  
0

字符串测试操作符

字符串测试操作符的作用有:比较两个字符串是否相同、字符串的长度是否为零、字符串是否为NULL等。

字符串操作符				含义
[ -z str ]				如果字符串str长度为0,返回真
[-n str ]				如果字符串 str 长度不为 0,返回真
[ str ]					如果字符串str 不为空,返回真
[ strl = str2 ]			测试字符串str]是否与字符串str2相等,可使用--代替-
[ str1 != str2 ]		测试字符串str1是否与字符串str2不相等,但不能用!-代替!
[[ strl -- str2 ]]		两字符串相同返回真
[[ strl != str2 ]]		两字符串不相同返回真
[[ strl -~ str2 ]]		str2是strl的子串返回真
[[ strl > str2 ]]		str1大于str2返回真
[[ strl < str2 ]]		str1小于st2返回真

单、双中括号操作符两边必须留空格!字符串大小比较是按从左到右对应字符的ASCII码进行比较。

例子1,判读字符串$name长度是否为0,不为0返回1

[root@localhost tmp]# name1=josh; [ -z $name ]; echo $?
1

判断name1是否等于name2

[root@localhost tmp]# name2=andy; [ $name = $name2 ] ; echo $?
1

逻辑测试操作符

[ exprl -a expr2 ]	逻辑与,都为真时,结果为真
[ exprl -0 expr2 ]	逻辑或,有一个为真时,结果为真
[!expr]				逻辑非匹配模式的逻辑测试操作符,需要写在双中括号中
&&					逻辑与
||					逻辑或
!					逻辑非

注意在逻辑测试中,-a、-0 的含义,一个是逻辑与,一个是逻辑或。

[root@localhost tmp]# [ $x -eq 1 -a -n $name ]; echo $?
0
[root@localhost tmp]# a=10;b=11
[root@localhost tmp]# [[ $b -gt $a ]];echo $?			#判断b>a返回0
0

整数测试操作符

测试操作符               含义
[ intl -eq int2 ]        intl等于int2
[ intl -ne int2]         intl 不等于int2
[ intl -gt int2 ]        intl 大于int2
[ intl -ge int2]         int1大于或等于int2
[ intl -It int2 ]        intl小于int2
[intl -le int2]          int1小于或等于int2[[ intI -eq int2 ]]       intl等于int2返回真
[[ int1 -ne int2 ]]       intl不等于int2返回真
[[ intl -gt int2 ]]       int]大于int2返回真
[[ intl -ge int2 ]]       int1大于或等于int2返回真
[[ intl -It int2 ]]       int]小于int2返回真
[[ intl -le int2 ]]       int1小于或等于int2返回真

判断变量x是否等于1

[root@localhost ~]# x=1; [ $x -eq 1 ]; echo $?
0

y为字符串,将eq用于字符串与整数的比较时错误的,返回结果为假

[root@localhost ~]# y=a; [ $y -eq 1 ]; echo $?
-bash: [: a: 期待整数表达式
2

双小括号的整数测试操作符与含义

测试操作符					含义
((intl == int2)             intI等于int2返回真
((int1 != int2))            intl不等于int2返回真
((int1 > int2)              intl大于int2返回真
((int1 >= int2))            int1大于或等于int2返回真
((intl <int2)               intl小于int2返回真
(int1 <= int2))             int1小于或等于int2返回真

双小括号中整数测试操作符使用了=-、!=、>、>=、<、<= 等操作符,这些操作符只能用于整数测试,注意与单、双中括号中使用的操作符不同。另外,双小括号操作符两边的空格可省略。

[root@localhost ~]# a=2;b=6
[root@localhost ~]# [[ $a != $b ]]; echo $?
0[root@localhost ~]# [[ $a>  $b ]]; echo $? 
1

文件测试操作符

文件测试操作符用来测试文件是否存在、文件属性、访问权限等场景

测试操作符			含义
-f fhame            fname存在且是普通文件时,返回真(即返回0
-L fname            fname存在且是链接文件时,返回真
-d fname            fname存在且是一个目录时,返回真
-e fname            finame(文件或目录)存在时,返回真
-s fame             finame存在且大小大于0时,返回真
-r fname            finame(文件或目录)存在且可读时,返回真
-w fname            fname(文件或目录)存在且可写时,返回真
-X fname            fname(文件或目录)存在且可执行时,返回真

shellfile 是新创建的-个普通文件,返回真,不是则返回假

[root@localhost ~]# touch shellfile
[root@localhost ~]# ll  shellfile 
-rw-r--r--. 1 root root 0 1021 22:09 shellfile
[root@localhost ~]# [ -f shellfile ]; echo $?
0

shellfile不是一个目录,所以返回假

[root@localhost ~]# [ -d shellfilel ]; echo $?
1

#shellfile是一个存在的文件,所以返回真

[root@localhost ~]# [ -e shellfile ]; echo $?
0

条件测试举例

逻辑与测试

[root@localhost ~]# x=6; name=josh;
[root@localhost ~]# [ $x -eq 6 -a -n $name ]; echo $?
0

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

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

相关文章

vscode调试container(进行rocksdb调试)+vscode比较git项目不同分支和fork的哪个分支

vscode调试container&#xff08;进行rocksdb调试&#xff09; 参考链接&#xff1a; https://blog.csdn.net/qq_29809823/article/details/128445308#t5 https://blog.csdn.net/qq_29809823/article/details/121978762#t7 使用vscode中的插件dev containners->点击左侧的…

zmq封装

ZmqBindlib zmq常用封装 使用方法 基本使用 1.简单请求回复 ZmqRequest request new ZmqRequest();request.RemoteAddress localaddes;request.PubClient "A";int num 0;while (true){// Thread.Sleep(1000);//string msg request.Request("hi"…

【微信小程序开发】小程序微信用户授权登录(用户信息手机号)

&#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 接下来看看由辉辉所写的关于小程序的相关操作吧 目录 &#x1f973;&#x1f973;Welcome Huihuis Code World ! !&#x1f973;&#x1f973; 授权流程讲解 一.用户信息授权登录 1.w…

MD-MTSP:粒子群优化算法PSO求解多仓库多旅行商问题MATLAB(可更改数据集,旅行商的数量和起点)

一、多仓库多旅行商问题MD-MTSP 多旅行商问题&#xff08;Multiple Traveling Salesman Problem, MTSP&#xff09;是著名的旅行商问题&#xff08;Traveling Salesman Problem, TSP&#xff09;的延伸&#xff0c;多旅行商问题定义为&#xff1a;给定一个&#x1d45b;座城市…

LabVIEW中管理大型数据

LabVIEW中管理大数据 LabVIEW的最大优势之一是自动内存管理。这种内存管理允许用户轻松创建字符串、数组和集群&#xff0c;而无需C/C用户经常担心。但是&#xff0c;这种内存管理设计为绝对安全&#xff0c;因此数据被非常频繁地复制。这通常不会造成任何问题&#xff0c;但是…

vue3 列表页开发【选择展示列】功能

目录 背景描述&#xff1a; 开发流程&#xff1a; 详细开发流程&#xff1a; 总结&#xff1a; 背景描述&#xff1a; 这个功能是基于之前写的 封装列表页 的功能继续写的&#xff0c;加了一个选择展示列的功能&#xff0c;可以随时控制表格里展示那些列的数据&#xf…

【算法教程】排列与组合的实现

数据准备 在讲排列与组合之前&#xff0c;我们先定义数据元素类型Fruit class Fruit{constructor(name,price){this.name namethis.price price} }排列 对N个不同元素进行排序&#xff0c;总共有多少不同的排列方式&#xff1f; Step1: 从N个元素中取1个&#xff0c;共N种…

Pandas 数据处理分析系列1--SeriesDataFrame数据结构详解

Pandas 概述 Pandas 是一个开源的数据分析和数据处理库,是基于 NumPy 开发的。它提供了灵活且高效的数据结构,使得处理和分析结构化、缺失和时间序列数据变得更加容易。其在数据分析和数据处理领域广泛应用,在金融、社交媒体、科学研究等领域都有很高的使用率和广泛的应用场…

系列十一、Redis中分布式缓存实现

一、缓存 1.1、什么是缓存 内存就是计算机内存中的一段数据。 1.2、内存中的数据特点 读写快断电数据丢失 1.3、缓存解决了什么问题 提高了网站的吞吐量和运行效率减轻了数据库的访问压力 1.4、哪些数据适合加缓存 使用缓存时&#xff0c;一定是数据库中的数据极少发生改…

【Vue】Element开发笔记

Element开发笔记 前言 官网 https://element.eleme.cn/#/zh-CN/component/upload 其它项目网站 https://www.cnblogs.com/qq2806933146xiaobai/p/17180878.html 表格 序号列添加 <el-table-column type"index" :index"handleIndexCalc" label&qu…

深度强化学习 第 4 章 DQN 与 Q 学习

4.1 DQN 最优动作价值函数的用途 假如我们知道 Q ⋆ Q_⋆ Q⋆​&#xff0c;我们就能用它做控制。 我们希望知道 Q ⋆ Q_⋆ Q⋆​&#xff0c;因为它就像是先知一般&#xff0c;可以预见未来&#xff0c;在 t t t 时刻就预见 t t t 到 n n n时刻之间的累计奖励的期望。假如…

5G来临,迎客莱带你探索运营商大数据的应用

随着5G时代的来临&#xff0c;不仅在算力的基础上得到了加强和保障&#xff0c;同时也丰富了计算的方式和模式&#xff0c;如边缘计算、霾计算等。计算方式和模式的改变&#xff0c;对于运营商来说&#xff0c;意味着更丰富的数据维度&#xff0c;更鲜活的数据和更强大的数据处…

无人机航拍图像拼接与目标识别

一、简介 无人机用来做图像侦察是常见功能&#xff0c;现有技术基本是无人机对某片区域进行飞行&#xff0c;人工实时监控飞行图像&#xff0c;将图像录制成视频供事后回放。此方法对人员业务要求比较高、反应速度足够快、不利于信息收集、录制视频丢失空间信息、对于后期开展区…

Qt判断一个点在多边形内还是外(支持凸边形和凹变形)

这里实现的方法是转载于https://blog.csdn.net/trj14/article/details/43190653和https://blog.csdn.net/WilliamSun0122/article/details/77994526 来实现的&#xff0c;并且按照Qt的规则进行了调整。 以下实现方法有四种&#xff0c;每种方法的具体讲解在转载的博客中有说明&…

Python之爬虫

目录 HTTP请求HTTP响应获得页面响应伪装用户访问打包数据爬取豆瓣top250 HTTP请求 HTTP&#xff1a;HypertextTransferProtcol 超文本传输协议 1、请求行 POST/user/info?new_usertrue HTTP/1.1#资源了路径user/info 查询参数new_usertrue 协议版本HTTP/1.1 2、请求头 Ho…

element ui 下拉框 选择月份和天数

一、背景 目前做的管理系统项目&#xff0c;期望实现功能为&#xff1a;设置出账周期和出账日&#xff0c;考虑使用element ui下拉框实现功能 二、所用技术 vue2element ui 三、实现效果 四、具体代码 <template><popup-frame :title"批量设置出账日" …

Leetcode—2530.执行K次操作后的最大分数【中等】(C语言向上取整数学公式)

2023每日刷题&#xff08;五&#xff09; Leetcode—2530.执行K次操作后的最大分数 向上取整思想 参考了这篇文章 有人肯定会问&#xff0c;这个向上取整为什么是这样来的。接下来我简单讲解一下。 数学式&#xff1a; x y 数学式&#xff1a;\frac{x}{y} 数学式&#xff1a…

配置Linux

首先安装VMware&#xff1a; 安装说明&#xff1a;&#xff08;含许可证的key&#xff09; https://mp.weixin.qq.com/s/XE-BmeKHlhfiRA1bkNHTtg 给大家提供了VMware Workstation Pro16&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1q8VE3TkPzDnM3u9bkTdA_g 提取码&…

文件的物理结构(连续分配,链接分配,索引分配)

1.文件块&#xff0c;磁盘块 类似于内存分页&#xff0c;磁盘中的存储单元也会被分为一个个“块/磁盘块/物理块”。 很多操作系统中&#xff0c;磁盘块的大小与内存块、页面的大小相同。 内存与磁盘之间的数据交换&#xff08;即读/写操作、磁盘I/O&#xff09;都是以“块”为…

详细解读DALLE 3技术报告:Improving Image Generation with Better Captions

Diffusion models代码解读&#xff1a;入门与实战 前言&#xff1a;OpenAI是推动大模型创新的领头羊&#xff0c;最近发布的DALLE 3凭借着远超市面上其他图片生成模型的表现&#xff0c;再次火出圈。最近OpenAI官方发布了DALLE 3的技术报告《Improving Image Generation with B…