linux命令:计算的相关命令(expr、let、bc、(())、 $[])
linux中计算的相关命令(expr、let、bc、(())、 $[])
一、expr
expr(evaluate expressions)命令为Linux中的命令,一般用于整数值计算
,但也可用于字符串操作
。
1、整数运算
(1)注意:
需要空格
,需要加"\"
不让特殊字符转义。
符号 | 用法 |
---|---|
\(反斜杠) | 放在 shell 特定的字符前面 |
“”(引号) | 对包含空格和其他特殊字符的字符串要用引号括起来 |
(2)语法:
expr argument operator argument
参数说明
argument
:为第一个参数
operator
:为操作运算符
argument
:为第二个参数
(3)运用实例
$expr 10 + 10
20
$expr 1500 + 900
2400
$expr 30 / 3
10
$expr 30 / 3 / 2
5
$expr 30 \* 3
90
使用乘号时,必须用反斜线屏蔽其特定含义
。因为shell可能会误解显示星号的意义。
2、字符串操作
(1)计算字符串的长度语法
1)语法
expr length ”字符串“
2)应用实例
expr length "xxxxx"
5
(2)截取字符串语法
1)语法
expr substr ”字符串“ startNode endNode
参数 | 含义 |
---|---|
startNode | 截取字符串的起始位置,从1开始(注意编号从1开始,而不是0开始) |
endNode | 截取字符串的结束位置,包含这个位置也被截取 |
2)应用实例
expr length "abcdefg" 13
abc
(3)获取一个字符在字符串中第一次出现的位置
1)语法
expr index 被查找的字符串 需要查找的字符
2)应用实例
expr length "abcdefg" c
3
(4)正则表达式匹配1语法
1)语法
expr match 字符串 正则表达式
a.正则表达式默认带有“^”
,表示已什么开头
b.返回值为符合,匹配字符长度,否则返回0
c.正则表达式“."(点)
代表任意一个字符
d.正则表达式中通配符“*”(星号)
代表前面的字符可以出现0次到多次
e.“.*m”(点心m)
:匹配字符串中m前面的字符串长度(以任意长度字符开头到m结束且包含m,匹配m之前的长度。得出匹配字符串的长度)
2)应用实例
expr match "abcdefgm" ".*m"
8
expr match "abcdefgm" ".*g"
7
expr match "abcdefgm" ".*x"
0
(5)正则表达式匹配2语法,功能和1一样,语法比1简单
1)语法
expr 字符串 :正则表达式
a.正则表达式默认带有“^”,表示已什么开头
b.返回值为符合,匹配字符长度,否则返回0
2)应用实例
expr match "abcdefgm" : ".*m"
8
二、let
1、功能
let命令进行整数数学运算赋值。
注意:
let命令和双小括号(()),在数学计算方面功能一样
,但是没有(())的功能强大,let只能用于赋值计算,不能直接输出,不可以和if条件判断一起使用
。
2、语法
let 赋值表达式
(1)语法功能等价于((表达式))
,let后面的整数运算表达式中变量不需要加$,特殊字符前也不需要加“\”。
(2)多个表达式之间使用空格,而不是","号
。
(3)对于类似let a+b
这样的写法,Shell虽然计算了a+b的值,但却将结果丢弃,如果echo let a+b
会直接输出字符串a+b
;若不想这样,可以使用let sum=a+b将a+b的结果保存在变量sum中
。
3、运用实例
(1)正常整数运算
a=1 b=2
let c=a+b
echo $c
3
(2)变量++和++变量的区别
a=2
let b=a++
echo $a $b
3 2
c=2
let d=++c
echo $c $d
3 3
(3)变量数值自增+2的表示方法
a=4
let a+=2
echo $a
6
(4)乘法表示方法
b=2
let b*=6;echo $b
12
4、总结
(1)let数字整数计算用法
(2)作用:用于赋值,是最简洁的整数运算赋值命令计算赋值用法: let变量名=整数运算表达式
(3)多个表达式计算赋值用法: let 变量名1=整数运算表达式1 变量名2=整数运算表达式2 …
三、bc
1、功能
完成整数及小数运算
(1)能够在bc中进行互动式的数学运算
(2)能够在shell中进行非互动式的bc管道运算
(3)能够在shell中非互动式的输入重定向bc运算
2、bc中的互动式的数学运算
(1)语法(作为系统计算器使用)
bc [选项] [参数]
对文件内容进行计算
cat x.txt
100+22+34
140+22+34
# 文件内编辑运算内容
bc -q x.txt
156
196
# 直接得出每行结果
(2)内置变量
scale
:指定精度,对计算结果指定保留小数;默认为0,即不使用小数部分只保留整数位。
3、bc在shell中进行非互动式的bc管道运算
(1)语法
echo "表达式" | bc [选项]
(2)将bc计算的结果赋值给shell变量
第一种方式:
A=$(echo "表达式" | bc [选项])
第二种方式:反引号
A=echo "表达式" | bc [选项]
两种方式区别:
``反引号是所有linux系统支持的方式。兼容性较好,但是容易与引号产生混淆
$()不是所有linux系统都支持的方式。兼容性较差,但是不容易产生混淆
4、bc在shell中进行非互动式的输入重定向运算
(1)作用
将计算表达式输出给bc去执行,特点类似于文件中输入,可以输入多行表达式,更加清晰。
(2)语法
第一种方式:
A=`bc << EOF
第一行表达式
第二行表达式
第三行表达式
......................
EOF
` (反引号结束)
第二种方式:
A=$(bc << EOF
第一行表达式
第二行表达式
第三行表达式
......................
EOF
) 括号结束
四、(())
1、作用
(())在运算表达式书写时,彼此之间有无空格都可以,遇到特殊字符时也不需要加“\”能够使用(())进行整数的数学运算。
2、解析
双小括号(()),用于进行数学运算表达式的执行,将数学运算表达式放在((和))之间。可以使用$获取(())表达式命令的结果,这和使用$获得变量值是一样的
。
3、语法
((整数运算表达式))
4、用法
(1)给与双括号里面的变量赋值
((a=1+6))
:可以在计算完成后给变量赋值。
((b=a-1))
:把a-1的计算结果赋值给b,此中的变量a前面不需要加$,(())具有自动解析双括号内的变量的功能。
(2)给与双括号外面的变量赋值
a=$((1+6))
b=$((a-1))
c=$((a+b))
解析:
可以在(())前面加上S符号获取(())命令的执行结果,从而获取整个表达式的值。以c=$((a+b))
为例,即将a+b这个表达式的运算结果赋值给变量c。注意,如果c=((a+b)
这样的写法是错误的,不加$
就不能取得表达式的结果。
(3)于逻辑预算符进行使用
((a>7 && b==c))
:(())也可以进行逻辑运算,在if语句中常会使用逻辑运算。
echo $((a+10))
:需要立即输出表达式的运算结果时,可以在(())前面加$符号
((a=3+5,b=a+10))
:对多个表达式同时进行计算时,多表表达式使用"∵"号隔开
# 计算1+6并赋值给变量a
((a=1+6))
# 计算变量a-1赋值给变量b
((b=a-1))
# 计算变量a+变量b赋值给变量c
((a+b))
# 打印变量a,变量b,变量c的值
echo "a=${a},b=${b},c=${c}"
# $赋值写法
a=$((1+6)) b=$((b=a-1)) c=$((a+b))
# (())多个表达式计算赋值
((a=1+6,b=a-1,c=a+b))
# echo输出直接使用(())
echo "1+6=$((1+6))"
# (())用于逻辑表达式在if中使用
if ((a>7 && b==c))
then
echo "a>7 && b==c成立"
else
echo "a>7 && b==c 不成立"
fi
(4)总结
1)括号内赋值:((变量名=整数表达式))
2)括号外赋值:变量名=$((整数表达式))
3)多表达式赋值:((变量名1=整数表达式1,变量名2=整数表达式2...))
4)与if条件句配合使用:if((整数表达式))
五、$[]
1、功能
能够使用$[ ]
进行整数的数学运算。
和(())、let命令类似,$[ ]也只能进行整数运算。但是只能对单个表达式的计算求值与输出,不能多个同属进行。
2、语法
$[表达式]
(1)$[ ]会对表达式进行计算,并取得计算结果
(2)表达式内部不可以赋值给变量没有(())功能强大
3、应用实例
a=$[a=2+9]
echo $a
1
# 括号不需要空格和对特殊字符的处理
b=$[c=2*a]
echo $b
22
# c=2xa
d=$[a**2]
echo $d
121
# d=a的2次方
a=$[a**3]
echo $e
1331
# d=a的3次方
六、总结
1、let赋值最方便 。
2、(())直接求值输出最方便,且支持多表达式同时运算。
3、expr
优点:可以直接输出。
缺点:计算表达式里面引用变量使用$,特殊字符需要转义只能计算一个表达式。
4、(())
优点:直接输出,里面直接使用变量名,特殊字符不需要转义,多个表达式赋值,可进行多表达式同时i计算,使用”,“互相分开。
缺点:需要获值以后才可以输出。
5、let
优点:赋值简单,特殊字符不需要转义,可进行多表达式同时i计算,使用空格互相分开。
缺点:不能直接输出。
6、$[ ]
优点:特殊字符不需要转义。
缺点:不能进行多表达式同时计算。
7、bc可以计算整数和小数,在保留小数后几位,只有除法有效。
参考自:
https://blog.csdn.net/m0_62948770/article/details/126083511
更多推荐
所有评论(0)