【Linux】shell中运算符(整数、字符串)
文章目录
- 1. 整数
- 1.1、算数运算符
- 1.1.1 加减乘除运算
- 1.1.2 =号关系运算
- 1.1.2.1 =(赋值)、==(等于)、!=(不等于)的使用
- 1.1.2.2 >、>=、<、<=的使用
- 1.2 $((运算式)) 双括号形式 、 $[运算式] 语法 进行运算
- 1.3 -eq关系运算符
- 1.4 =、==、-eq的区别
- 2 字符串
- 2.1 字符串运算
- 3 逻辑运算符
- 参考
在shell中,和其他编程语言一样也有多种运算符,常用的运算符有:算数运算符、关系运算符、逻辑运算符、字符串运算符、文件测试运算符等。
但是由于存在整数和字符串,处理的语法稍有不同;因此我们划分整数和字符串类型
1. 整数
1.1、算数运算符
算数运算符就是我们最常见的,常用的主要有+(加)、-(减)、*(乘)、/(除)、%(取余)、=(赋值)、==(等于)、!=(不等于)。
下表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:
运算符 | 说明 | 举例 |
---|---|---|
+ | 加法 | `expr $a + $b` 结果为 30。 |
- | 减法 | `expr $a - $b` 结果为 -10。 |
* | 乘法 | `expr $a \* $b` 结果为 200。 |
/ | 除法 | `expr $b / $a` 结果为 2。 |
% | 取余 | `expr $b % $a` 结果为 0。 |
= | 赋值 | a=$b 将把变量 b 的值赋给 a。 |
== | 相等。用于比较两个数字,相同则返回 true。 | [ $a == $b ] 返回 false。 |
!= | 不相等。用于比较两个数字,不相同则返回 true。 | [ $a != $b ] 返回 true。 |
注意:条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。
1.1.1 加减乘除运算
shell是不支持简单的数学运算的,这时候我们就可以使用expr命令来实现shell中的简单运算,expr 是一款表达式计算工具,使用它能完成表达式的求值操作。expr的命令使用方法是:比如1+2要写成expr 1 + 2
,expr和计算公式需要写在 ` ` 中(方括号,esc下面的那个按钮)并且数值和运算符之间要有空格
`expr 1+2`是不对的。
不带运算符,会当做普通字符串进行输出:
echo "1+2" #先试下正常的运算方式能否得到结果
#打印结果 1+2
带了运算符,如果没有空格,会当做普通字符串进行输出
:
echo `expr 1+2` #数值和运算符中间没有空格时
#打印结果 1+2
正例,注意乘法运算需要转义字符
:
echo `expr 1 + 2` #加法
#打印结果 3
echo `expr 2 - 1` #减法
#打印结果 1
echo `expr 2 \* 3` #乘法必须要使用反斜杠才能实现
#打印结果 6
echo `expr 2 * 3` #乘法没有反斜杠时
#打印结果 expr: 语法错误echo `expr 6 / 2` #除法
#打印结果 3
echo `expr 6 % 4` #取余
#打印结果 2
1.1.2 =号关系运算
什么是关系运算?就是比大小、判断是否相等,常用在 if
条件判断中
出去加减乘除,剩下的符号中,有的可以进行简单的关系运算, =(单等于)、==(等于)、!=(不等于) 、>、>=、<、<=
注意:if 条件表达式要放在方括号之间,并且要有空格,例如: [$a==$b] 是错误的,必须写成 [ $a == $b ]。
不建议使用 == 、> 、 >= 等符号进行数字比较,因为如果是字符串的话,也可以使用 ,并且表示不同的含义,这样如果数字类型变量误定义为字符串类型,不容易发现错误,建议使用 -eq 语法进行比较。
1.1.2.1 =(赋值)、==(等于)、!=(不等于)的使用
在 if 语法中,放在[]
中 ,示例:
#!/bin/bash
a=10
b=20if [ $a == $b ]
thenecho "a 等于 b" # 不打印
fi
if [ $a != $b ]
thenecho "a 不等于 b" #打印
fi
1.1.2.2 >、>=、<、<=的使用
< 小于(需要双括号),如: if (("$a" < "$b"))<= 小于等于(需要双括号),如: if (("$a" <= "$b"))> 大于(需要双括号),如: if (("$a" > "$b"))>= 大于等于(需要双括号),如: if (("$a" >= "$b"))
在 if 语法中,放在 (( ))
中 ,要和 中括号区分开来,示例:
a=10
b=20if(("$a" < "$b"))
thenecho "a 小于 b" # 不打印
fi
双括号结构中,变量名引用可以加 $,也可以不加;
运算符前后可以有空格,也可以没有
但是为了方便识别,建议加 $ 并且保留空格
1.2 $((运算式)) 双括号形式 、 $[运算式] 语法 进行运算
我们也可以直接使用 + - 进行简单的运算,但是需要借助 $((运算式)) 双括号形式 和“$[运算式] 语法 ,详情参见 【Linux】 shell 常用的数据类型(数字、字符串和数组)和运算中的 <1.1 计算>章节
1.3 -eq关系运算符
这里提到的关系运算符是特殊的,通过字母实现的,而不是前文的数学符号
下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20,注意使用中括号或双中括号
语法:
运算符 | 说明 | 举例 |
---|---|---|
-eq | 检测两个数是否相等,相等返回 true。 | [ $a -eq $b ] 返回 false。 |
-ne | 检测两个数是否不相等,不相等返回 true。 | [ $a -ne $b ] 返回 true。 |
-gt | 检测左边的数是否大于右边的,如果是,则返回 true。 | [ $a -gt $b ] 返回 false。 |
-lt | 检测左边的数是否小于右边的,如果是,则返回 true。 | [ $a -lt $b ] 返回 true。 |
-ge | 检测左边的数是否大于等于右边的,如果是,则返回 true。 | [ $a -ge $b ] 返回 false。 |
-le | 检测左边的数是否小于等于右边的,如果是,则返回 true。 | [ $a -le $b ] 返回 true。 |
示例:
#!/bin/basha=10
b=20if [ $a -eq $b ]
thenecho "$a -eq $b : a 等于 b"
elseecho "$a -eq $b: a 不等于 b" # 打印
fiif [ $a -ne $b ]
thenecho "$a -ne $b: a 不等于 b" # 打印
elseecho "$a -ne $b : a 等于 b"
fiif [ $a -gt $b ]
thenecho "$a -gt $b: a 大于 b"
elseecho "$a -gt $b: a 不大于 b" # 打印
fiif [ $a -lt $b ]
thenecho "$a -lt $b: a 小于 b" # 打印
elseecho "$a -lt $b: a 不小于 b"
fiif [ $a -ge $b ]
thenecho "$a -ge $b: a 大于或等于 b"
elseecho "$a -ge $b: a 小于 b" # 打印
fiif [ $a -le $b ]
thenecho "$a -le $b: a 小于或等于 b" # 打印
elseecho "$a -le $b: a 大于 b"
fi
关系运算符的应用范围只支持数字(确切的说是整数,小数暂不确定),不支持字符串,因此 建议数字 进行关系运算时采用这种方案,这样如果数字类型变量误定义为字符串类型,可以及时发现错误,例如:
#!/bin/bash
a=10
b=abcif [ $a -eq $b ]
thenecho "a 不等于 b"
fi
由于b变量是字符串,执行时报类型不是整型错误:
[ubuntu]$ ./a.sh
./a.sh: line 14: [: abc: integer expression expected
1.4 =、==、-eq的区别
(1)单等号和双等号能用于字符string类型和整型integer的相等判断。
(2)相等关系运算符“-eq”仅能用于整型integer的相等比较。
(3)相等关系运算符“-eq”不能在算数运算表达式“(( ))”中
(4)在 if 条件表达式
“[ ]”中,单等号和双等号等价,都是相等算数运算符。
(5)在算数运算表达式“(( ))”中,单等号是赋值算数运算符,双等号为相等算数运算符。
总结:在进行相等判断时,最通用的方法是使用双等号“==”相等判断符,避免使用单引号引起歧义。而且数字比较和字符串比较都可以用 == 号,并且建议数字类型时使用 -eq 语法,这样可以检测非数字异常。
2 字符串
2.1 字符串运算
参见
3 逻辑运算符
参见 【Linux】shell中的逻辑运算符
参考
Shell 基本运算符
linux shell中的比较符号与特殊符号介绍
相关文章:
【Linux】shell中运算符(整数、字符串)
文章目录1. 整数1.1、算数运算符1.1.1 加减乘除运算1.1.2 号关系运算1.1.2.1 (赋值)、(等于)、!(不等于)的使用1.1.2.2 >、>、<、<的使用1.2 $((运算式)) 双括号形式 、 $[运算式] 语法 进行运算1.3 -eq关系运算符1.4 、、-eq的区别2 字符串2.1 字符串运算3 逻辑运…...
【从零单排Golang】第八话:通过cache缓存模块示范interface该怎么用
和许多面向对象的编程语言一样,Golang也存在interface接口这样的概念。interface相当于是一个中间层,下游只需要关心interface实现了什么行为,利用这些行为做些业务级别事情,而上游则负责实现interface,把这些行为具象…...
解析从Linux零拷贝深入了解Linux-I/O(上)
本文将从文件传输场景以及零拷贝技术深究 Linux I/O 的发展过程、优化手段以及实际应用。前言 存储器是计算机的核心部件之一,在完全理想的状态下,存储器应该要同时具备以下三种特性: 速度足够快:存储器的存取速度应当快于 CPU …...
JavaScript系列之公有、私有和静态属性和方法
文章の目录一、公有属性、公有方法1、定义2、理解3、ES54、ES6二、私有属性、私有方法1、定义2、理解3、ES54、ES6三、静态属性、静态方法1、定义2、理解3、ES54、ES6写在最后一、公有属性、公有方法 1、定义 指的是所属这个类的所有对象都可以访问的属性,叫做公有…...
过滤器与拦截器
文章目录一、前言1、概述2、过滤器与拦截器异同2.1 简介2.2 异同2.3 总结3、Filters vs HandlerInterceptors二、过滤器1、概述2、生命周期2.1 生命周期概述2.2 基于函数回调实现原理3、自定义过滤器两种实现方式3.1 WebFilter注解注册3.2 过滤器(配置类注册过滤器&…...
spring boot 和cloud 版本升级
spring boot 和cloud 版本对应 背景:原来一直用的版本是Hoxton.SR12 2.3.10.RELEASE(SR12一路升,几乎没有影响,不需要测试,但是换大版本就有点担心) 去年2022年底黑鸭子报漏洞把springboot,clou…...
untiy 录制网络摄像头视频并保存到本地文件
网络摄像头使用的是海康威视的,关于如何使用Ump插件播放海康威视rtsp视频流,请参考我的这篇文章 内部有ump插件的下载链接 untiy接入 海康威视网络摄像头 录屏使用的插件是 AVPro movieCapture 4.6.3版, 插件和完整工程的下载链接放在本文的…...
微服务架构设计模式-(15)部署
关联概念 流程 将软件投入到生产环境 架构 软件运行的环境结构 生产环境四个关键功能 服务管理接口 使开发人员能够创建、更新和配置服务 运行时服务管理 确保始终运行一定数量的服务实例非中断更新 监控 让开发人员了解服务情况,包括日志文件和各种应用指标可观…...
Redis:数据结构
简单动态字符串SDS Redis没有直接使用C语言传统的字符串表示(以空字符结尾的字符数组,以下简称C字符串),而是自己构 建了一种名为简单动态字符串(simple dynamic string, SDS)的抽象类型,并将SDS用作Redis的默认字符 串表示。 SDS 的实现…...
2.18 设置language和中文输入法
文章目录一:设置language二:设置中文输入法一:设置language nvidia的开发板上默认只有English,需要点击如下管理: 接着进入如下界面: 此时图中的“汉语(中国)”应该是没有的&…...
图解LeetCode——剑指 Offer 28. 对称的二叉树
一、题目 请实现一个函数,用来判断一棵二叉树是不是对称的。如果一棵二叉树和它的镜像一样,那么它是对称的。 二、示例 2.1> 示例 1: 【输入】root [1,2,2,3,4,4,3] 【输出】true 2.2> 示例 2: 【输入】root [1,2,2,nul…...
Qt Desginer布局方法
首先将我们需要的控件拖拽到一个合适的位置,该例子中用到了两个label,两个lineEdit和两个pushButton。 然后我们需要利用弹簧来控制控件到控件之间的距离以及控件到窗体边界的距离,因为这里只有一组控件(两个label,两个…...
C/C++、Java、Python的比较及学习(3)
函数间的值传递与地址传递 值传递方式:指主调函数把实参的值赋给形参。 在这种传递方式下,主调函数中的实参地址与被调函数中的形参地址是相互独立的。 函数被调用时,系统为形参变量分配内存单元,并将实参的值存入到对应形参的内存…...
智慧校园建设方案
第一章、 智慧教学 6.1. 校本资源库 提供校本资源管理功能,实现学校内的教学资源的共建共享,促进教师之间的交流学习,提升学校的整体教学水平。在本系统中学校可以统一采购资源接入到校本资源库中供教师下载使用,教师也可以将…...
ARM uboot 源码分析5 -启动第二阶段
一、start_armboot 解析6 1、console_init_f (1) console_init_f 是 console(控制台)的第一阶段初始化。_f 表示是第一阶段初始化,_r 表示第二阶段初始化。有时候初始化函数不能一次一起完成,中间必须要夹杂一些代码,…...
【ip neigh】管理IP邻居( 添加ARP\NDP静态记录、删除记录、查看记录)
一、邻居管理存在状态 1、NUD_NONE: 初始状态。当一个新的路由缓存条目被创建时,arp_bind_neighbour()函数被调用.如果找不到相匹配的ARP缓存条目, neigh_alloc()将创建一个新的ARP缓存条目并设置状态为NUD_NONE. 2、NUD_INCOMPLETE:未完成状…...
Java程序员线上排查问题神器-Arthas
文章目录前言一、Arthas是什么?二、快速入门1.下载2.如何运行三、常用命令1.dashboard2.trace总结前言 最近公司项目版本迭代升级,在开发新需求导致没什么时间写博客。 在开发需求的过程中,我写了一个接口,去批量调内部已经写好…...
上市公司企业持续创新能力、创新可持续性(原始数据+计算代码+计算结果)(2008-2021年)
数据来源:自主计算 时间跨度:2008-2021年 区域范围:沪深A股上市公司 指标说明: 参考何郁冰(2017)[1]的做法,将持续创新作为独立研究变量,同时采用创新投入指标(研发经费) 和创新…...
华为OD机试 - 考古学家(JS)
考古学家 题目 有一个考古学家发现一个石碑 但是很可惜 发现时其已经断成多段 原地发现N个断口整齐的石碑碎片 为了破解石碑内容 考古学家希望有程序能帮忙计算复原后的石碑文字组合数 你能帮忙吗 备注: 如果存在石碑碎片内容完全相同,则由于碎片间的顺序不影响复原后的碑…...
Leetcode.2100 适合打劫银行的日子
题目链接 Leetcode.2100 适合打劫银行的日子 Rating : 1702 题目描述 你和一群强盗准备打劫银行。给你一个下标从 0开始的整数数组 security,其中 security[i]是第 i天执勤警卫的数量。日子从 0开始编号。同时给你一个整数 time。 如果第 i天满足以下所…...
linux ubuntu查日志信息以及错误排查
目录 一、linux的日志文件 1、常用日志文件 2、其他日志文件 二、历史日志的查看 1、查看Logrotate的配置信息 2、查看日志配置 一、linux的日志文件 Linux系统中最有趣的(可能也是最重要的)目录之一是/var/log。根据文件系统层次结构标准,在系统中运行的大多数…...
DOS经典软件,落下帷幕,新型国产平台,蓬勃发展
提起DOS时代,总让人难以忘怀,陷入深深回忆中,风靡一时的许多软件,如今早已不在,这几款被称为DOS必装的软件,更是让人惋惜。 你还记得这图吗?堪称DOS系统最经典的软盘复制与映像生成软件…...
MongoDB数据存储格式
前言 之前分享了MongoDB的基本命名和视图等信息,本文分享一下MongoDB的数据存储类型,使用方式。基础的MongoDB信息就学习完啦,之后会继续分享MongoDB进阶的一些东西。 MongoDB数据存储格式前言1 文件结构1.2 字段名称2 点符号2.2 嵌入式文件…...
ARC126D Pure Straight
ARC126D Pure Straight 题目大意 给一个长度为nnn的整数序列A(a1,a2,…,an)A(a_1,a_2,\dots,a_n)A(a1,a2,…,an),其中ai∈[1,k]a_i\in [1,k]ai∈[1,k]。 你可以做如下操作任意次: 交换相邻两个元素 求最小的操作次数,使得序列AA…...
基于RK3588的嵌入式linux系统开发(四)——uboot镜像下载(基于RKDevTool工具)
官方提供的SDK中包含RKDevTool工具(RKDevTool_Release_v2.92)和相应的驱动(DriverAssitant_v5.1.1)。本节主要介绍在windows操作系统环境下利用RKDevTool下载以上生成的uboot镜像和bootloader镜像。注意:本节使用的板卡…...
设计模式之策略模式与责任链模式详解和应用
目录1.策略模式1.1 目标1.2.内容定位1.3.定义1.4.应用场景1.5.促销优惠业务场景1.6 用策略模式实现选择支付方式的业务场景1.7 策略模式在框架源码中的体现1.8 策略模式的优缺点2 责任链模式2.1 责任链楼式的应用场景2.2 利用责任链模式进行数据校验拦截2.3 责任链模式和建造者…...
广度优先搜索(BFS)-蓝桥杯
一、BFS搜索的原理BFS搜索的原理:“逐层扩散”,从起点出发,按层次从近到远,逐层先后搜索。编码:用队列实现。应用:BFS一般用于求最短路径问题,BFS的特点是逐层搜索,先搜到的层离起点…...
Java Type类
文章目录Type简介Type分类1. 原始类型(Class)2. 参数化类型(ParameterizedType)3. 类型变量(TypeVariable)4. 通配符类型(WildcardType)5. 泛型数组类型(GenericArrayType)Type简介 Type是Java编程语言中所有类型的公共高级接口。它们包括原始类型、参数化类型、数组类型、类型…...
Springboot扩展点之CommandLineRunner和ApplicationRunner
Springboot扩展点系列:Springboot扩展点之ApplicationContextInitializerSpringboot扩展点之BeanFactoryPostProcessorSpringboot扩展点之BeanDefinitionRegistryPostProcessorSpringboot扩展点之BeanPostProcessorSpringboot扩展点之InstantiationAwareBeanPostPro…...
ngixn 常用配置之文件类型与自定义 log
大家好,我是 17 。 总结了一些 nginx 的常用配置。从入口文件开始,今天讲一下文件类型和自定义log 为了讲述方便,环境为 CentOS 7, nginx 版本 1.21。 配置文件入口 /etc/nginx/nginx.conf这是入口文件,这个文件里…...
淘宝客做网站怎么做/哈尔滨seo优化软件
后面两张success plot分别是按照threshold和auc排序 各tracker说明: Year2015: 【CF2】 实验结果比论文中的结果好,原因是我运行的是作者后期又更新过的代码,作者添加了仿DSST的尺度更新,而在原论文中实现上ÿ…...
集美网站开发/交换链接或称互惠链接
Table在IOS应用开发中非常重要,现在我们就来学习一下 1. 首先我们来了解一下Table的视图结构 表头视图(table header view):表视图最上边的视图,用于展示表视图的信息,例如表视图刷新信息表脚视图(table footer view):表视图最下边的视图,用于…...
哪些企业网站做的好/企业官网首页设计
知识回顾:当鼠标在窗口内移动,点击或者释放时都会产生WM_NCHITTEST消息,响应函数OnNcHitTest会返回一个枚举值,系统会根据这个枚举值进行相应的处理。 当返回值为HTCAPTION时,系统会认为此时鼠标位于标题栏上,因而当鼠标按下并移动时就会执行拖动操作。我们需要做的就是响应这个…...
检查色盲效果网站/上海网站搜索引擎优化
前言 在发生故障切换后,经常遇到的问题就是同步报错,数据库很小的时候,dump完再导入很简单就处理好了,但线上的数据库都5T,如果用单纯的这种方法,成本太高,故经过一段时间的摸索,总…...
郑州市重点项目建设办公室网站/软文网站推广法
NBearLite是NBearV4的几个核心组件之一,也是目前NBearV3中ORM部分的查询语法的核心。NBearLite本身并不是一个完整的ORM解决方案,配合目前Teddy正常开发的NBearMapping组件使用(某个中间组件过渡),组成一套完整强大的O…...
有平面广告设计的网站/sem优化
稍等跟新...