SHELL之数值运算

news/2024/11/15 11:48:55/文章来源:https://www.cnblogs.com/OpenSourceSite/p/18368786

【四则运算符号】

表达式 举例
$(( )) echo $((1+1))
$[ ] echo $[10-5]
expr expr 10 / 5 (运算符左右有空格)
let n=1;let n+=1 等价于 let n=n+1

一、整数运算
1、基本运算类别

  • 加法:+
  • 减法:-
  • 乘法:*
  • 整除:/
  • 取余数:%

2、expr运算工具

  • 加法:+
  • 减法:-
  • 乘法:*
  • 整除:/
  • 取余数:%

3、$[ ]算式替换

使用$[ ] 或 $(( ))表达式

  • 格式:$[整数1 运算符 整数2 .. ..]
  • 乘法操作*无需转译,运算符两侧可以无空格
  • 引用变量可省略$符号
  • 计算结果替换表达式本身,可结合echo命令输出

注意:

脚本第2行if [ $# -lt 1  -o $1 -gt 9  ] ; then
如果替换为 :if (( $# <  1  ||  $1  >  9  )); then
结果会怎么样 ? 为什么 ? 
在判断数值大小除了可以用”(( ))”的形式外,还可以使用”[ ]”。但是就不能使用>, < , = 这样的符号了,要使用 -lt (小于),-gt (大于),-le (小于等于),-ge (大于等于),-eq (等于),-ne (不等于)&&,逻辑的and的意思, -a也是这个意思;
||,逻辑的or的意思, -o 也是这个意思
[root@scp1 ~]# x=30
[root@scp1 ~]# echo $[x+20]
50
[root@scp1 ~]# echo $((x+10)),$((x*60))
40,1800

4、变量的自增/减等操作

使用$[]替换,或let命令完成
结合echo命令查看结果

二、小数运算

1、整数运算的局限性

  • bash内建机制仅支持整数值运算
  • expr命令、$[] 算式运算不支持有小数的运算

2、使用bc实现小数的运算

多数linux系统默认安装此工具

  • 支持高精度的数值运算
  • 直接运行bc可进入交互式运算界面,quit退出
  • 设置scale=n 可约束小数位

结合管道向bc发送表达式

  • 多个表达式以分号分隔
  • 通过echo命令+管道传递要计算的表达式

小数值的比较
基本用法

  • echo "数值1 比较符 数值2" | bc
  • 如果表达式成立,则返回的计算结果为1,否则返回0
  • 常见的比较操作:>、>=、<、<+、==、!=

三、了解i++和++i

  • ++ 是后缀自增运算符,表示在表达式求值后,变量 i 的值增加 1。
  • ++j 是前缀自增运算符,表示在表达式求值前,变量 j 的值增加 1。

在表达式 let x=i++ 中,i 的值在赋值给 x 后增加,所以 x 得到的是 i 增加前的值。而在表达式 let y=++j 中,j 的值在赋值给 y 之前就已经增加了,所以 y 得到的是 j 增加后的值。

1、对变量的值的影响

[root@MissHou ~]# i=1
[root@MissHou ~]# let i++
[root@MissHou ~]# echo $i
2
[root@MissHou ~]# j=1
[root@MissHou ~]# let ++j
[root@MissHou ~]# echo $j
2

2、对表达式的值的影响

[root@MissHou ~]# unset i j
[root@MissHou ~]# i=1;j=1
[root@MissHou ~]# let x=i++         先赋值,再运算
[root@MissHou ~]# echo $x
1
[root@MissHou ~]# let y=++j         先运算,再赋值
[root@MissHou ~]# echo $y
2
[root@MissHou ~]# echo $i
2
[root@MissHou ~]# echo $j
2

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

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

相关文章

FIFO读数取数

FIFO:先进先出的缓存器。常应用于带宽不同或者跨时钟域等数据传输情况。 相关参数:数据宽度,存储深度,将空标志位。空标志位。将满标志位,满标志位。读写时钟。其中将满信号与将空信号相较于真正的满信号与空信号都会提前一个时钟周期拉高。FIFO generator配置注意事项:B…

如何使用midjourney?MidJourney订阅计划及国内订阅教程

MidJourney订阅计划 MidJourney提供四种不同的订阅计划:订阅计划 每月费用 年度费用 使用限制基础计划 $10/月 $96/年($8/月) 每月可生成200张图,无fast模式,不能免排队生成图标准计划 $30/月 $288/年($24/月) 每月可无限量生成图片,15小时fast模式,免排队生成图,有隐…

寻访中国100家.NET中大企业 —— 第二站:苏州行

一:事情起因 在.NET圈里混了十多年,相信有不少人知道我专注于玩 .NET高级调试,如今技术上的硬实力还是能够解决市面上的一些疑难杂症,但软实力却在另一个极端,如(人际交往,人情事故),所以就萌生了刻意训练的念头,便自我发起了这个活动 "寻访中国100家.NET中大企…

7zip如何使带中文的文件名以utf-8编码?

问题: 在win 上压缩中文模版文件后,在Linux 上解压乱码 解决方案: 7-zip压缩的zip文件里面带有中文文件名的,在其他平台上解压后中文文件名乱码。在网上查找了下资料,使用7-zip压缩zip文件,可以使用参数cu=on,强制文件名以utf-8格式编码,在其他平台上解压后正常。 下图…

Windows 10、Windows 11 配置 gradle8

Windows 10、Windows 11 配置 gradle8GRADLE_HOME=D:\development\gradle\gradle-8.8GRADLE_USER_HOME=D:\\repository\\gradle-repository%GRADLE_HOME%\bin

windows环境Jenkins部署前端项目

在Windows环境下使用Jenkins部署前端项目,可以按照以下步骤进行: 1. 安装Jenkins可以从Jenkins官网下载Windows版本的Jenkins安装包。 安装完成后,启动Jenkins服务,并通过浏览器访问 http://localhost:8080 进入Jenkins管理界面。 windows环境Jenkins部署前端项目2. 配置Je…

提升认知:解锁成功之门的钥匙——实践、交流与阅读的力量

​ 认知,这个看似抽象的概念,实则是我们理解世界、做出决策的基石。它如同种子,孕育着思维的花朵,最终结出行为的果实,影响着我们生活的方方面面。我们所赚取的每一分钱,都是对这个世界认知的直接体现。当我们的认知深刻,我们能够洞察事物的本质,把握机遇,从而获得相应…

短URL服务设计

引言 在营销系统里,为了增加系统的活跃用户数,经常会有各种各样的营销活动。这类活动几乎都是为了充分利用存量用户的价值,促使他们分享产品或App以达到触达到更多用户的目的。又或者是出于营销目的,群发优惠券触达短信这种场景。 分享App活动页(或其他各种页面)时URL一般…

.NET 9 优化,抢先体验 C# 13 新特性

前言 微软即将在 2024年11月12日发布 .NET 9 的最终版本,而08月09日发布的.NET 9 Preview 7 是最终发布前的最后一个预览版。这个版本将与.NET Conf 2024一同亮相,并已与 Visual Studio 2022 17.12 预览版1一同发布,可以直接通过Visual Studio安装。同时Visual Studio Code …

原生JS实现虚拟列表

什么是虚拟列表 如果我们要将一个数组渲染为列表添加到页面中,我们可以很容易实现,无非就是循环遍历这个数组,然后依次创建 DOM 元素插入即可,但是如果数据量很庞大,比如有一万条数据,我们就要把一万个 DOM 结点插入到页面中,这显然会导致页面的卡顿。为了针对这个场景进…

高德/百度地图: 坐标拾取系统:用经纬度搜索

一,高德地图:坐标拾取器 https://developer.amap.com/tools/picker 如图: 二,百度地图:拾取坐标系统 https://api.map.baidu.com/lbsapi/getpoint/index.html

面试必备之TCP知识

概述 关于TCP的杂乱知识点,不成体系,毕竟TCP真的太复杂。 TCP,Transmission Control Protocol;IP,Internet Protocol,两者共同组成TCP/IP协议族,包含一系列构成互联网基础的网络协议。 OSI七层网络模型图片来自于OSI七层网络模型 OSI七层由于太过严格,所以并没有应用在…