Linux———— 运算命令
Shell与其他编程语言一样,支持多种类型的运算符,包括:
算术运算符:用于执行数学运算,例如加法、减法、乘法和除法。
关系运算符:用于比较两个值之间的关系,例如相等、大于、小于等。
布尔运算符: 用于执行逻辑运算,例如逻辑与、逻辑或、逻辑非。
字符串运算符:用于处理字符串,例如字符串连接、字符串相等性检查。
文件测试运算符: 用于检查文件属性,例如文件是否存在、文件是否可读等。
expr命令
expr (evaluate expressions 的缩写),译为“表达式求值”, `expr`是一种表达式计算工具,用于执行表达式求值操作。Shell expr 是一个功能强大,并且比较复杂的命令,它除了可以实现整数计算,还可以结合一些选项对字符串进行处理,例如计算字符串长度、字符串比较、字符串匹配、字符串提取等。
常用的算术运算符,假定变量 a 为 1,变量 b 为 2:
| 运算符 | 说明 | 举例 |
|---|---|---|
| + | 加法 | expr $a + $b 结果为 3 |
| - | 减法 | expr $a - $b 结果为 -1 |
| * | 乘法 | expr $a \* $b 结果为 2 |
| / | 除法 | expr $b / $a 结果为 2 |
| % | 取余 | expr $b % $a 结果为 0 |
| = | 赋值 | a=$b 将把变量 b 的值赋给 a |
注意:
- 表达式和运算符之间要有空格,例如 2+2 是不对的,必须写成 2 + 2,这与我们熟悉的大多数编程语言不一样。
- 完整的表达式要被 ` ` 包含,注意使用的是反引号 ` 而不是单引号 ',这个字符不是常用的单引号,在 Esc 键下边。
- 如果四则运算中如果使用了(),需要转义
\( 30+ 1 \)
求值表达式
算术运算符表达式(交互式)
expr 1 + 11 # 返回: 12
expr \( 30 + 10 \) \* 2 + 100 # 返回:180
获取计算结果赋值给新变量语法
result=`expr 1 + 1` # 输出result得到结果: 2
2).echo+管道
字符串语法
| 语法 | 说明 | 示例 |
|---|---|---|
| expr length 字符串 | 计算字符串的长度 | expr length "helloworld" 返回: 10 |
| expr substr 字符串 start end | 截取字符串 | expr substr "helloworld" 1 2 返回: hestart 截取字符串的起始位置,从1开始end 截取字符串的结束位置,包含这个位置截取 |
| expr index 被查找字符串 需要查找的字符 | 获取第一个字符在字符串中出现的位置 | expr index "helloworld" l 返回: 3 |
| expr match 字符串 正则表达式expr 字符串 : 正则表达式 | 正则表达式匹配,返回值为符合匹配字符的长度,否则返回为0 "expr match" 命令用于匹配一个字符串中的部分文本,而正则表达式 ".*o" 的含义如下:
| expr match "helloworld" ".*o" 返回: 7 |
运行效果:
(())命令
双小括号(( )),用于进行数学运算表达式的执行 , 将数学运算表达式放在((和))之间。可以使用 获取(())表达式命令的结果,这和使用 获得变量值是一样的。
| 语法 | 说明 |
|---|---|
| ((a=64+6)) ((b=a-6)) ((c=a+b*2)) | 这种写法可以在计算完成后给变量赋值。以 ((b=a-6)) 为例,即将 a-6的运算结果赋值给变量 c。 注意,使用变量时不用加$前缀,(( )) 会自动解析变量名。 |
| a=$((1+6) b=$((a-1)) c=$((a+b*2)) | 可以在 (( )) 前面加上$符号获取 (( )) 命令的执行结果,也即获取整个表达式的值。以 c=$((a+b*2)) 为例,即将 a+b 这个表达式的运算结果赋值给变量 c。 注意,如果 c=((a+b)) 这样的写法是错误的,不加$就不能取得表达式的结果。 |
| ((a>7 && b==c)) | (( )) 也可以进行逻辑运算,在 if 语句中常会使用逻辑运算。 |
| echo $((a+10)) | 需要立即输出表达式的运算结果时,可以在 (( )) 前面加$符号。 |
| ((a=3+5, b=a+10)) | 对多个表达式同时进行计算, 多表表达式使用”,”号隔开 |
注意: 符号之间有无空格都可以 , (( a = 1 + 6 )) 等价于 ((a=1+6))
示例:ce.sh脚本代码
#!/bin/bash
# 计算1+6赋值给变量a
((a=1+6))# 计算变量a-1赋值给变量b
((b=a-1))# 计算变量a+变量b赋值给变量c
((c=a+b))# 打印变量a,变量b, 变量c的值
echo "a=${a},b=${b},c=${c}"# $赋值写法
a=$((1+6)) b=$((a-1)) c=$((a+b))
echo "a=${a},b=${b},c=${c}"# (())多个表达式计算赋值
((a=1+6,b=a-1,c=a+b))
echo "a=${a},b=${b},c=${c}"# echo输出直接使用(())
echo "1+6=$((1+6))"# (()) 用于逻辑表达式 在if中使用
if ((a>7 && b==c))
thenecho "a>7 && b==c 成立"
elseecho "a>7 && b==c 不成立"
fi
运行效果:

总结:
- 括号内赋值: ((变量名=整数表达式))
- 括号外赋值: 变量名=$((整数表达式))
- 多表达式赋值: ((变量名1=整数表达式1,变量名2=整数表达式2,…))
- 与if条件句配合使用: if ((整数表达式))
let命令
let 命令和双小括号 (( )) 在数字计算方面功能一样。但是没有(())功能强大,let只能用于赋值计算,不能直接输出,不可以条件判断一起使用。let主要用于赋值,是最简洁的整数运算赋值命令。
let 赋值表达式
# 计算赋值用法: let 变量名=整数运算表达式
# 多个表达式计算赋值用法: let 变量名1=整数运算表达式1 变量名2=整数运算表达式2 ...
- 语法功能等价于
((表达式)) - 多个表达式之间使用空格,不是”
,“号 - 对于类似
let a+b这样的写法,Shell 虽然计算了 a+b 的值,但却将结果丢弃。如果echo let a+b会直接输出字符串a+b;若不想这样,可以使用let sum=a+b将 a+b 的结果保存在变量 sum 中。
$[]命令
在Linux和Unix Shell中,`$[]` 是一种旧的、过时的方法用于执行数学运算。它可以用来计算表达式的值。例如,您可以使用 `$[]` 来执行基本的算术运算,如加法、减法、乘法和除法。

效果展示:

四种计算命令对比
| 命令 | 优点 | 缺点 |
|---|---|---|
| expr | 可以直接输出。 | 计算表达式里面引用变量使用$,特殊字符需要转义,只能计算一个表达式。 |
| (( )) | 直接输出,里面直接使用变量名,特殊字符不需要转义,多个表达式赋值。(直接求值输出推荐方式) | 需要获取值以后才可以输出。 |
| let | 赋值简单,特殊字符不需要转义。(赋值推荐方式) | 不能直接输出。 |
| $[ ] | 特殊字符不需要转义。 | 不能多表达式计算。 |
bc命令
Bash Shell内置了对整数运算的支持,但是并不支持浮点运算,而 linux bc (basic calculator)命令可以很方便的进行浮点运算。bc命令是Linux简单的计算器,能进行进制转换与计算。能转换的进制包括十六进制、十进制、八进制、二进制等。可以使用的运算符号包括(+)加法、(-)减法、(*)乘法、(/)除法、(^)指数、(%)余数等。
bc [options] [参数]
选项options:
| 选项 | 说明 |
|---|---|
| -h | help,帮助信息 |
| -v | version,显示命令版本信息 |
| -l | mathlib, 使用标准数学库,例如使用内置函数就需要必须使用这个参数 |
| -i | interactive,强制交互 |
| -w | warn,显示 POSIX 的警告信息 |
| -s | standard,使用 POSIX 标准来处理 |
| -q | quiet,不显示欢迎信息 |
注意:
默认使用bc命令后回车会有很多欢迎信息, 可以使用
bc -q回车后不会有欢迎信息bc命令交互式下,输入quit 即可回到当前目录
bc需要每个表达式单独一行,并且要在运算符周围使用空格
参数:指定包含计算任务的文件。
常见的内置函数:
| 函数名 | 作用 |
| s(x) | 计算x的正弦值,x是弧度值 |
| c(x) | 计算x的余弦值,x是弧度值 |
| a(x) | 计算x的正切值,返回弧度值 |
| l(x) | 计算x的自然对数 |
| e(x) | 求e的x次方 |
| j(n,x) | 计算从n到x的阶数 |
测试效果:
文件可以执行多条语句:

相关文章:
Linux———— 运算命令
Shell与其他编程语言一样,支持多种类型的运算符,包括: 算术运算符:用于执行数学运算,例如加法、减法、乘法和除法。 关系运算符:用于比较两个值之间的关系,例如相等、大于、小于等。 布尔运算…...
批量去除pdf每一页相同未知的同样的内容
例如我想去除每一页右下角的www.alevelcollege.com ①打开acrobat pro ②编辑文件和图像 ③ctrlF输入字符串www.alevelcollege.com替换为空 ④鼠标点击替换 ⑤回车键按下不放,会自动翻页,直到翻页到最后一页。...
HCIA数据通信——静态路由
之前的文章中我提到过静态路由: 数据通信——网络层(路由器以及数据转发流程)_路由器如何转发数据_咕噜跳的博客-CSDN博客这里只做一些简单描述。 路由器关注的是网络之间的通信。路由器以自身为中心,考虑的是如何将数据发送到目…...
Fourier分析导论——第2章——Fourier级数的基本属性(E.M. Stein R. Shakarchi)
第 2 章 Fourier级数的基本属性(Basic Properties of Fourier Series) Nearly fifty years had passed without any progress on the question of analytic representation of an arbitrary function, when an assertion of Fourier threw new light on the subject. Thus…...
redis实现分布式延时队列
文章目录 延时队列简介应用场景案例:考虑:实现:整体思路:具体实现生产者消费者 运行结果 redis分布式延时队列优势redis分布式延时队列劣势 延时队列简介 延时队列是一种特殊的消息队列,它允许将消息在一定的延迟时间…...
Spring AOP源码解读
今天我们来分析Spring中AOP的源码,主要是关于SpringAOP是如何发挥作用的。 前期准备 首先我们需要有一个Spring AOP项目,添加好了SpringAOP的依赖。 <dependency><groupId>org.springframework</groupId><artifactId>spring-co…...
JavaScript基础入门01
目录 1.初识 JavaScript 1.1JavaScript 是什么 1.2发展历史 1.3JavaScript 和 HTML 和 CSS 之间的关系 2.JavaScript 的组成 3.前置知识 3.1第一个程序 4.JavaScript 的书写形式 4.1 行内式 4.2. 内嵌式 4.3.外部式 5.注释 6.输入输出 6.1输入: prompt 6.2输出: …...
yum 命令
基本语法 yum [选项] [参数] 选项说明 -y 对所有提问都回答“yes” 参数说明 实操 yum list | grep firefox yum -y remove firefox yum -y install firefox...
Nginx 部署多个安全域名,多个服务【工作记录】
以下是本人通过Docker 部署的Nginx挂载出来的文件目录 先看下 nginx.conf 配置文件内容:如下 ps:当前文件就是安装后的初始内容,无修改。主要关注最后一行 include /etc/nginx/conf.d/*.conf;表示引入其他目录下的.conf配置文件;…...
性能测试QPS+TPS+事务基础知识分析
本篇文章是性能测试基础篇,主要介绍了性能测试中对QPSTPS事务的基础知识分析,有需要的朋友可以借鉴参考下,希望可以对广大读者有所帮助 事务 就是用户某一步或几步操作的集合。不过,我们要保证它有一个完整意义。比如用户对某一…...
PSP - 蛋白质复合物 AlphaFold2 Multimer MSA Pairing 逻辑与优化
欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/134144591 在蛋白质复合物结构预测中,当序列 (Sequence) 是异源多链时,无论是AB,还是AABB,都需要 …...
C++中vec.size()-1的坑
问题描述:如下代码, #include <iostream> #include <vector>using namespace std;int main() {vector<int> vec {};for (int i 0; i < vec.size() - 1; i) {cout << "i " << i << ", vec[i] …...
Flask Shell 操作 SQLite
一、前言 这段时间在玩Flask Web,发现用Flask Shell去操作SQLite还是比较方便的。今天简单地介绍一下。 二、SQLite SQLite是一种嵌入式数据库,它的数据库就是一个文件,处理速度快,经常被集成在各种应用程序中,在IO…...
Mybatis—XML配置文件、动态SQL
学习完Mybatis的基本操作之后,继续学习Mybatis—XML配置文件、动态SQL。 目录 Mybatis的XML配置文件XML配置文件规范XML配置文件实现MybatisX的使用 Mybatis动态SQL动态SQL-if条件查询 \<if\>与\<where\>更新员工 \<set\>小结 动态SQL-\<forea…...
excel求差公式怎么使用?
利用excel求差,可能有许多的小伙伴已经会了,不过还是存在一些不太熟悉的朋友们,所以这里有必要讲解一下。其实求差的实现主要就是一个公式,就是用一个单元格中的数字“减去”另一个单元格中的数字“等于”第三个单元格。此公式掌握…...
高效分割分段视频:提升您的视频剪辑能力
在数字媒体时代,视频剪辑已经成为一项重要的技能。无论是制作个人影片、广告还是其他类型的视频内容,掌握高效的视频剪辑技巧都是必不可少的。本文将介绍如何引用云炫AI智剪高效地分割和分段视频,以提升您的视频剪辑能力。以下是详细的操作步…...
【c++|opencv】二、灰度变换和空间滤波---2.直方图和均衡化
every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 图像直方图、直方图均衡化 1. 图像直方图 #include <iostream> #include <opencv2/opencv.hpp>using namespace cv; using namespace std;…...
【Windows】线程同步之信号量(Semaphores)
概述: semaphores 的说明和使用 微软官方文档: Semaphore Objects - Win32 apps | Microsoft Learn Semaphores是解决各种 producer/consumer问题的关键要素。这种问题会存有一个缓冲区,可能在同一时间内被读出数据或被写入数据。 理论可以证…...
二叉树问题——前中后遍历数组构建二叉树
摘要 利用二叉树的前序,中序,后序,有序数组来构建相关二叉树的问题。 一、构建二叉树题目 105. 从前序与中序遍历序列构造二叉树 106. 从中序与后序遍历序列构造二叉树 889. 根据前序和后序遍历构造二叉树 617. 合并二叉树 226. 翻转二…...
Java保留n位小数的方法(超简洁)
要输出double类型保留n位小数的几种方法如下: 我们以保留6位小数为例 方法一:使用DecimalFormat类 import java.text.DecimalFormat;public class Main {public static void main(String[] args) {double number 3.141592653589793;DecimalFormat df …...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
应用升级/灾备测试时使用guarantee 闪回点迅速回退
1.场景 应用要升级,当升级失败时,数据库回退到升级前. 要测试系统,测试完成后,数据库要回退到测试前。 相对于RMAN恢复需要很长时间, 数据库闪回只需要几分钟。 2.技术实现 数据库设置 2个db_recovery参数 创建guarantee闪回点,不需要开启数据库闪回。…...
visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...
Neo4j 集群管理:原理、技术与最佳实践深度解析
Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...
pikachu靶场通关笔记22-1 SQL注入05-1-insert注入(报错法)
目录 一、SQL注入 二、insert注入 三、报错型注入 四、updatexml函数 五、源码审计 六、insert渗透实战 1、渗透准备 2、获取数据库名database 3、获取表名table 4、获取列名column 5、获取字段 本系列为通过《pikachu靶场通关笔记》的SQL注入关卡(共10关࿰…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
【从零学习JVM|第三篇】类的生命周期(高频面试题)
前言: 在Java编程中,类的生命周期是指类从被加载到内存中开始,到被卸载出内存为止的整个过程。了解类的生命周期对于理解Java程序的运行机制以及性能优化非常重要。本文会深入探寻类的生命周期,让读者对此有深刻印象。 目录 …...
WebRTC从入门到实践 - 零基础教程
WebRTC从入门到实践 - 零基础教程 目录 WebRTC简介 基础概念 工作原理 开发环境搭建 基础实践 三个实战案例 常见问题解答 1. WebRTC简介 1.1 什么是WebRTC? WebRTC(Web Real-Time Communication)是一个支持网页浏览器进行实时语音…...
快速排序算法改进:随机快排-荷兰国旗划分详解
随机快速排序-荷兰国旗划分算法详解 一、基础知识回顾1.1 快速排序简介1.2 荷兰国旗问题 二、随机快排 - 荷兰国旗划分原理2.1 随机化枢轴选择2.2 荷兰国旗划分过程2.3 结合随机快排与荷兰国旗划分 三、代码实现3.1 Python实现3.2 Java实现3.3 C实现 四、性能分析4.1 时间复杂度…...
Django RBAC项目后端实战 - 03 DRF权限控制实现
项目背景 在上一篇文章中,我们完成了JWT认证系统的集成。本篇文章将实现基于Redis的RBAC权限控制系统,为系统提供细粒度的权限控制。 开发目标 实现基于Redis的权限缓存机制开发DRF权限控制类实现权限管理API配置权限白名单 前置配置 在开始开发权限…...
