【shell】shell数值计算(加减乘除)或将字符串转换成数字
目录
数值计算
用shell脚本 计算两个数的加减乘除取余
1 2 3 4 5 6 7 8 9 |
|
shell 包含三个命令:bc、expr、let可用于数值计算。
输入:整数,let和expr都无法进行浮点运算,但是bc和awk可以。
输出:bc、expr可直接显示计算结果;let则丢弃计算结果,可通过传递结果到变量,取变量值获得计算结果。
格式示例:
bc
[root@localhost ~]# echo 300 + 5 |bc
305
[root@localhost ~]# echo 300 - 5 |bc
295
[root@localhost ~]# echo 300 /* 5 |bc
1500
[root@localhost ~]# echo 300 / 5 |bc
60
--------------------------------------------------------
expr
[root@localhost ~]# expr 300 + 5
305
[root@localhost ~]# expr 300 - 5
295
[root@localhost ~]# expr 300 /* 5
1500
[root@localhost ~]# expr 300 / 5
60
------------------------------------------------------
let
[root@localhost ~]# let i=300+5
[root@localhost ~]# echo $i
305
[root@localhost ~]# let i=300-5
[root@localhost ~]# echo $i
295
[root@localhost ~]# let i=300/*5
[root@localhost ~]# echo $i
1500
[root@localhost ~]# let i=300/5
[root@localhost ~]# echo $i
60
-----------------------------------------------------
经测试,bc允许运算量和运算符之间无空格,let 不允许有空格,expr运算量和运算符之间必须有空格。
[root@localhost ~]# let i = 5 + 3
-bash: let: =: syntax error: operand expected (error token is "=")
[root@localhost ~]# echo 300+5 |bc
305
[root@localhost ~]# expr 300+5
300+5
参考:
let的使用 http://www.cublog.cn/u/3374/showart_225918.html
expr字符处理 http://bkeep.blog.163.com/blog/static/123414290201054111712718/
expr乘法运算符 http://blog.163.com/lgh_2002/blog/static/44017526200911804630930/
shell数值运算多种方法 http://jidiblog.blog.51cto.com/140821/282481
————————————————
原文链接:https://blog.csdn.net/praylucky/article/details/6252963
变量计算
$(($start_index-1))
$(($myarg - $myarg2))
字符数值转换
shell去除字符串前所有的0
[root@localhost sh]# str=00007985566465
[root@localhost sh]# str_new=$(echo -e $str | sed -r 's/0*([0-9])/\1/')
[root@localhost sh]# echo $str_new
7985566465
字符串转数值
a=“08”
b=echo $a|awk '{print int($0)}'
echo $b
输出:8
从字符串中提取数字
echo "2014年7月21日" | tr -cd "[0-9]"
这样就可以提取出2014721
字符截取方法
原文:https://www.jb51.net/article/56563.htm
https://www.cnblogs.com/cangqinglang/p/11952838.html
解决类型
假设有变量 var=http://www.aaa.com/123.htm.
1. # 号截取,删除左边字符,保留右边字符。
1
echo ${var#*//}
其中 var 是变量名,# 号是运算符,*// 表示从左边开始删除第一个 // 号及左边的所有字符
即删除 http://
结果是 :www.aaa.com/123.htm
2. ## 号截取,删除左边字符,保留右边字符。
1
echo ${var##*/}
##*/ 表示从左边开始删除最后(最右边)一个 / 号及左边的所有字符
即删除 http://www.aaa.com/
结果是 123.htm
3. %号截取,删除右边字符,保留左边字符
1
echo ${var%/*}
%/* 表示从右边开始,删除第一个 / 号及右边的字符
结果是:http://www.aaa.com
4. %% 号截取,删除右边字符,保留左边字符
1
echo ${var%%/*}
%%/* 表示从右边开始,删除最后(最左边)一个 / 号及右边的字符
结果是:http:
5. 从左边第几个字符开始,及字符的个数
1
echo ${var:0:5}
其中的 0 表示左边第一个字符开始,5 表示字符的总个数。
结果是:http:
6. 从左边第几个字符开始,一直到结束。
1
echo ${var:7}
其中的 7 表示左边第8个字符开始,一直到结束。
结果是 :www.aaa.com/123.htm
7. 从右边第几个字符开始,及字符的个数
1
echo ${var:0-7:3}
其中的 0-7 表示右边算起第七个字符开始,3 表示字符的个数。
结果是:123
8. 从右边第几个字符开始,一直到结束。
1
echo ${var:0-7}
表示从右边第七个字符开始,一直到结束。
结果是:123.htm
注:(左边的第一个字符是用 0 表示,右边的第一个字符用 0-1 表示)
汇总
最后,我们对以上 8 种格式做一个汇总,请看下表:
格式 说明
${string: start :length} 从 string 字符串的左边第 start 个字符开始,向右截取 length 个字符。
${string: start} 从 string 字符串的左边第 start 个字符开始截取,直到最后。
${string: 0-start :length} 从 string 字符串的右边第 start 个字符开始,向右截取 length 个字符。
${string: 0-start} 从 string 字符串的右边第 start 个字符开始截取,直到最后。
${string#*chars} 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。
${string##*chars} 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 右边的所有字符。
${string%chars*} 从 string 字符串第一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。
${string%%chars*} 从 string 字符串最后一次出现 *chars 的位置开始,截取 *chars 左边的所有字符。
原文链接:https://blog.csdn.net/bandaoyu/article/details/113770557
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET10 - 预览版1新功能体验(一)