Shell计算命令
expr命令详解
计算字符串长度语法
expr length 字符串
# 例如:expr length “wyq” 返回:3
截取字符串语法
expr substr 字符串 start end
# 例如:expr substr “wyqshi” 2 4
获取第一个字符在字符串中出行的位置语法
expr index 被查找字符串 需要查找的字符
#注意,都是从1开始的
# 例如:expr index “wyqshi” q
正则表达式匹配1语法
expr match 字符串 正则表达式
# 正则表达式默认带有^ ,代表以什么开头
.表示任意字符,*表示所有
#表示匹配q以前的所有任意字符
正则表达式匹配2语法
expr 字符串:正则表达式
(())命令详解
用于进行数学运算
| 运算操作符/命令 | 说明 |
|
((a=1+6)) ((b=a-1)) ((c=a+b)) | |
|
a=$((1+6)) b=$((a-1)) c=$((a+b)) | |
| ((a>7 && b==c)) | |
| echo $((a+10)) | |
| ((a=3+5,b=a+10)) |
注意:符号之间有无空格都可以
实例
需求
#计算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))
#(())多个表达式计算赋值
((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))
then
echo "a>7 && b==c 成立"
else
echo "a>7 && b==c 不成立"
fi
总结:
括号内赋值:((变量名=整数表达式))
括号外赋值:变量名=$(())
多表达式赋值:((变量名1=整数表达式1,变量名2=整数表达式2,))
与if配合使用
let命令详解
在赋值上是最快速的,不能直接输出,不可以和条件判断一起使用
语法
let 赋值表达式
需求
#计算变量a-1赋值给变量b
let a=1+6
let b=a-1
#计算变量a + 变量b 赋值给c
let c=a+b
#打印变量a,b,c
echo "a=${a},b=${b},c=${c}"
#let多个表达式计算赋值
let a=1+6,b=a-1,c=a+b
echo "a=${a},b=${b},c=${c}"
小结:
let数字计算用法
作用:用于赋值,是最简洁的整数运算赋值命令
计算赋值用法:let 变量名=整数运算表达式
多个表达式计算赋值用法:let 变量名1=整数运算表达式1 变量名2=整数运算表达式2
$[]命令详解
只能进行整数运算,只能对单个表达式的计算求值与输出
语法
$[ 表达式 ]
可以对表达式进行计算,并得到结果
表达式内部不可以赋值给变量
示例
小结
expr
优点:可以直接输出
缺点:计算表达式里面引用变量使用$,特殊字符需要转义,只能计算一个表达式
(()) 直接求值输出最推荐
优点:直接输出,里面直接使用变量名,特殊字符不需要转义,多个表达式赋值
缺点:需要获取值后才可以输出
let 赋值推荐
优点:赋值简单,特殊字符不需要转义
缺点:不可以直接输出
$[]
优点:特殊字符不需要转义
缺点:不能多表达式计算
bc命令
bc [options] [参数]
-l:使用标准数学库
-q:quiet ,不显示欢迎信息
示例:bc执行计算任务的文件
内置变量
| 变量名 | 作用 |
| scale |
指定精度,即小数点后的位数,对计算结果指定保留小数,默认不适用小数部分 |
| ibase |
指定输入的数字的进制,默认为十进制 |
| obase | 指定输出的数字的进制,默认为十进制 |
| last 或者. | 获取最近计算打印结果的数字 |
内置数学函数
配合 -l
| 函数名 | 作用 |
| s(x) | 计算x正弦值,x是弧度制 |
| c(x) | 计算x余弦值 |
| a(x) | 计算x反正切值 |
| l(x) | 计算x自然对数 |
| e(x) | 求e的x次方 |
| j(n,x) | 计算从n到x阶数 |
作用
在linux下bc当计算器用,3个用法
- bc中互动的数学运算
- shell中非互动的管道运算
- shell中互动式的输入重定向运算
示例:bc中互动的数学运算
实例:shell中非互动的管道运算
直接进行bc表达式计算输出
echo “expression” | bc [option]
“expression”表达式必须符合bc命令要求的公式
“expression”表达式里面可以引用shell变量
例如:shell变量a=2 在表达式中

将bc计算结果赋值给shell变量
# 第一种
var_name=`echo "expression" | bc [option] `
# 第二种
var_name=$(echo "expression" | bc [option])
# 示例
区别: `` 所有Linux都兼容
shel中非互动式的输入重定向运算
特点类似文件中输入,可以多行运算表达式
语法
# 第一种
var_name=`bc [opyions] << EOF
第一行表达式1
第二行表达式2
……
EOF
`
# 第二种
var_name=$(bc [options] << EOF
第一行表达式1
第二行表达式2
……
EOF
)
EOF...EOF 输入流的多行表达式
含义:将EOF中间多行表达式给到bc去执行,在将bc结果给shell变量var_name
DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。
更多推荐















所有评论(0)