当前位置:网站首页>shell中计算命令详解(expr、(())、 $[]、let、bc )
shell中计算命令详解(expr、(())、 $[]、let、bc )
2022-08-02 08:02:00 【行走DI五花】
目录
一、expr命令
expr (evaluate expressions的缩写)。"表达式求值"。Shell expr是一个功能强大。并且比较复杂的命令,它除了可以实现整数计算,还可以结合一些选项对字符串进行处理,例如计算字符串长度、字符串比较、字符串匹配、字符串提取等。
空格 | 隔开每个项 |
\(反斜杠) | 放在 shell 特定的字符前面 |
“”(引号) | 对包含空格和其他特殊字符的字符串要用引号括起来 |
1、整数运算(注意需要空格,需要加"\"不让特殊字符转义)
1、获取计算的结果赋值给新变量的语法
可以使用$()和 两个反撇好”``“ 表示。
2、字符串语法
1、计算字符串的长度语法
语法:expr length
2、截取字符串语法
语法:expr substr ”字符串“ start end
#start 截取字符串的起始位置,从1开始(注意编号从一开始,而不是0开始)
#end截取字符串的结束位置,包含这个位置也被截取
(start=1;end=2)
3、获取一个字符在字符串中第一次出现的位置
语法:expr index 被查找的字符串 需要查找的字符
4、正则表达式匹配1语法
语法: expr match 字符串 正则表达式
#正则表达式默认带有“^”,表示已什么开头
#返回值为符合,匹配字符长度,否则返回0
#正则表达式“."(点)代表任意一个字符
#正则表达式中通配符“*”(星号)代表前面的字符可以出现0次到多次
#“.*m”(点心m):匹配字符串中m前面的字符串长度(以任意长度字符开头到m结束且包含m,匹配m之前的长度。得出匹配字符串的长度)
5、正则表达式匹配2语法,功能和1一样,语法比1简单
语法:expr 字符串 :正则表达式
#正则表达式默认带有“^”,表示已什么开头
#返回值为符合,匹配字符长度,否则返回0
expr 小结:
1.整数计算:
expr 整数运算表达式
2字符串操作:
expr length 字符串 :获取字符串的长度
expr substr 字符串 start end : 截取字符串
expr index 字符串 查找的字符 :查找字符在字符串中第一次出现的位置,位置从1开始的
(expr match 字符串 正则表达式);(expr 字符串 : 正则表达式)
二、计算命令 :(()) 命令
1、作用
(())在运算表达式书写时,彼此之间有无空格都可以,遇到特殊字符时也不需要加“\”
能够使用(())进行整数的数学运算
2、介绍
双小括号(()),用于进行数学运算表达式的执行,将数学运算表达式放在((和))之间。可以使用$获取(())表达式命令的结果,这和使用$获得变量值是一样的。
3、语法
((整数运算表达式))
4、用法
① 给与双括号里面的变量赋值
((a=1+6)) 可以在计算完成后给变量赋值。
((b=a-1)) 把a-1的计算结果赋值给b,此中的变量a前面不需要加$,(())具有自动解析双括号内 的变量的功能。
②给与双括号外面的变量赋值
a=$((1+6))
b=$((a-1))
c=$((a+b))
解析:可以在(())前面加上S符号获取(())命令的执行结果,从而获取整个表达式的值。以c=$((a+b))为例,即将a+b这个表达式的运算结果赋值给变量c。注意,如果c=((a+b)这样的写法是错误的,不加$就不能取得表达式的结果。
③于逻辑预算符进行使用
((a>7 && b==c)) : (())也可以进行逻辑运算,在if语句中常会使用逻辑运算。
echo $((a+10)) : 需要立即输出表达式的运算结果时,可以在(())前面加$符号
((a=3+5,b=a+10)) : 对多个表达式同时进行计算时,多表表达式使用"∵"号隔开
需求:
1、计算1+6并赋值给变量a
2、计算变量a-1赋值给变量b
3、计算变量a+变量b赋值给变量c
4、打印变量a,变量b,变量c的值
5、$赋值写法
6、(())多个表达式计算赋值
7、 echo输出直接使用(())
8、 (())用于逻辑表达式在if中使用
(()) 用法 小结:
1、括号内赋值:((变量名=整数表达式))
2、括号外赋值:变量名=$((整数表达式))
3、多表达式赋值:((变量名1=整数表达式1,变量名2=整数表达式2...))
4、与if条件句配合使用: if((整数表达式))
三、let 命令详解
功能:能够使用let进行整数数学运算赋值
let命令和双小括号(()),在数学计算方面功能一样,但是没有(())的功能强大,let只能用于赋值计算,不能直接输出,不可以和if条件判断一起使用。
语法:let 赋值表达式
1、语法功能等价于((表达式)),let后面的整数运算表达式中变量不需要加$,特殊字符前也不需要加“\”
2、多个表达式之间使用空格 而不是","号
3、对于类似let a+b这样的写法,Shell虽然计算了a+b的值,但却将结果丢弃,如果echo let a+b 会直接输出字符串 a+b;若不想这样。可以使用1et summa+b将a+b的结果保存在变量sum中
示例:正常整数运算
变量++和++变量的区别
变量数值自增+2的表示方法
乘法表示方法
let 命令小结:
1、let数字整数计算用法
2、作用:用于赋值,是最简洁的整数运算赋值命令计算赋值用法: let变量名=整数运算表达式
3、多个表达式计算赋值用法: let 变量名1=整数运算表达式1 变量名2=整数运算表达式2 ...
四、$[] 命令
1、功能
能够使用$[ ]进行整数的数学运算
和(())、let命令类似,$[ ]也只能进行整数运算。但是只能对单个表达式的计算求值与输出,不能多个同属进行。
2、语法
格式:$[表达式]
①$[ ]会对表达式进行计算,并取得计算结果
②表达式内部不可以赋值给变量没有(())功能强大
3、用法
五、bc 命令
1、功能:
完成整数及小数运算
①能够在bc中进行互动式的数学运算
②能够在shell中进行非互动式的bc管道运算
③能够在shell中非互动式的输入重定向bc运算
Ⅰ:bc中的互动式的数学运算
2、语法
语法一(作为系统计算器使用)
格式:bc [选项] [参数]
还可以对文件内容进行计算
3、内置变量
scale :指定精度,对计算结果指定保留小数;默认为0,即不使用小数部分只保留整数位。
Ⅱ: bc在shell中进行非互动式的bc管道运算
1、语法
echo "表达式" | bc [选项]
2、将bc计算的结果赋值给shell变量
第一种方式:
A=$(echo "表达式" | bc [选项])
第二种方式:反引号
A=`echo "表达式" | bc [选项]`
两种方式区别:``反引号是所有linux系统支持的方式。兼容性较好,但是容易与引号产生混淆
$()不是所有linux系统都支持的方式。兼容性较差,但是不容易产生混淆
Ⅲ: bc在shell中进行非互动式的输入重定向运算
1、作用
将计算表达式输出给bc去执行,特点类似于文件中输入,可以输入多行表达式,更加清晰
2、语法
第一种方式:
A=`bc << EOF
第一行表达式
第二行表达式
第三行表达式
......................
EOF
` (反引号结束)
第二种方式:
A=$(bc << EOF
第一行表达式
第二行表达式
第三行表达式
......................
EOF
) 括号结束
总结:
let 赋值最方便
(()) 直接求值输出最方便,且支持多表达式同时运算
expr 优点:可以直接输出
缺点:计算表达式里面引用变量使用$,特殊字符需要转义只能计算一个表达式
(()) 优点:直接输出,里面直接使用变量名,特殊字符不需要转义,多个表达式赋值,可进行多表达式 同时i计算,使用”,“互相分开
缺点:需要获值以后才可以输出
let 优点:赋值简单,特殊字符不需要转义,可进行多表达式同时i计算,使用空格互相分开
缺点:不能直接输出
$[ ] 优点:特殊字符不需要转义
缺点: 不能进行多表达式同时计算
bc 可以计算整数和小数,在保留小数后几位,只有除法有效
边栏推荐
- EPSANet: An Efficient Pyramid Split Attention Block on Convolutional Neural Network
- MySQL事务隔离级别详解
- etcd implements large-scale service governance application combat
- Spark 系统性学习笔记系列
- 五款优秀免费的在线抠图工具
- Redis分布式锁入门
- redis高阶使用之Redisson分布式锁源码解析
- 52.【bool类型输入任何非0数值不为1的版本原因】
- Button to control the running water light (timer)
- Biotin-C6-amine|N-biotinyl-1,6-hexanediamine|CAS: 65953-56-2
猜你喜欢
随机推荐
cas:139504-50-0 美登素DM1|Mertansine|
优炫数据库的逻辑复制怎么样?
典型的一次IO的两个阶段是什么?阻塞、非阻塞、同步、异步
R语言plotly可视化:plotly可视化回归模型实际值和回归预测值的散点图分析回归模型的预测效能、一个好的模型大部分的散点在对角线附近(predicted vs actual)
Seleniu screenshots code and assign name to the picture
积分商城商品供应商选择的三个要求
学习笔记(7)Funtion
五款优秀免费的在线抠图工具
mysqldump --set-gtid-purged=OFF
MySQL优化:从十几秒优化到三百毫秒
@Repository详解
力扣:第 304 场周赛
oracle的sql改成mysql版本
基于PyTorch的flappy bird游戏
R language plotly visualization: plotly visualizes the scatter plot of the actual value of the regression model and the predicted value of the regression, analyzes the prediction performance of the re
小说里的编程 【连载之二十二】元宇宙里月亮弯弯
Wang Xuegang - compiled shipment line file
[OC学习笔记]ARC与引用计数
sql创建表格 如图 运行完提示invalid table name 是什么原因
R language plotly visualization: use the plotly visualization model to predict the true positive rate (True positive) TPR and false positive rate (False positive) FPR curve under different thresholds