shell计算命令

expr 命令,表达式求值

字符串操作

expr length 字符串   #计算字符串长度
expr substr 字符串 start end   #截取字符串
expr index 字符串  需要查找的字符  #获取第一个字符在字符串中第一次出现的位置,从1开始计数
expr match 字符串 正则表达式    #正则表达式匹配返回匹配字符串的长度,
expr 字符串: 正则表达式   #和上面相同


计算命令(())

用于数学表达式的执行,将数学表达式放在双括号之间,可以自动解析变量,不使用$符号(在双括号之间赋值);在双括号外面赋值需要使用$符号,整数赋值命令

let 命令

和(())计算方面的功能相同,没有(())功能强大 ,只能用于赋值计算,

let a=1+2
let b=a+1
let b=1+2 c=2+4 d=3+4   #多表達式计算

$[]命令

只能对单个表达式计算求值与输出,整数计算

$[]
a=$[1+3]

bc命令

bash 只提供了整数运算,不支持浮点运算,linux bc 命令(basic calclator)可以进行浮点运算,进制转换,

bc [-option ] [参数]    #参数,指定包含计算任务的文件
选项 说明
-h 帮助信息
-l 使用标准数学库

内置变量

scale   指定精度,默认为0,不使用小数部分
ibase   指定输入的数字进制
obase    指定输出的数字进制
last or .       获取最近计算的结果文字

image-20231106155652286

使用内置数学函数必须要使用-l参数

bc 使用

  • 互动式
  • 非互动式管道运算
  • 非互动式输入重定向运算
echo "ecpresion"|bc [option]
表达式中可以使用shell变量;
echo "scale =2;10/3"| bc
将bc计算结果赋值给shell 变量
val_name=`echo "scale =2;10/3"| bc`
val_name=$(echo "scale =2;10/3"| bc)

非互动式输入重定向运算

将计算表达式输出到bc去执行,可以输入多行表达式,更加清晰;

第一种方式,将一个多行表达式输出给bc执行,结果赋值给变量名
var_name=`bc<<EOF
#第一行表达式,
#第二行表达式,
..
EOF
`
#第二种方式,
var_name=$(bc<<EOF
#第一行表达式,
#第二行表达式,
..
EOF
)

EOF输入流表达式

bc执行bc命令

将多个表达式的结果拼成字符串赋值给变量;

bc是一个任意精度计算器;