Linux Shell 算术运算_shell的表示n+=1-程序员宅基地

技术标签: Script  Linux/Shell  awk  shell  linux  米扑博客  算术运算  

米扑博客 总结了 Bash shell 的算术运算有四种方式:

1、使用 expr 外部程式

加法 r=`expr 4 + 5`
echo $r

注意! '4' '+' '5' 这三者之间要有空格

r=`expr 4 * 5` # 错误
乘法 r=`expr 4 \* 5`

 

2、使用 $(( ))

r=$(( 4 + 5 ))
echo $r

 

3、使用 $[ ]

r=$[ 4 + 5 ]
echo $r

乘法
r=`expr 4 \* 5` 
r=$(( 4 * 5 ))
r=$[ 4 * 5 ]
echo $r

除法
r=`expr 40 / 5` 
r=$(( 40 / 5 ))
r=$[ 40 / 5 ]
echo $r

减法
r=`expr 40 - 5` 
r=$(( 40 - 5 ))
r=$[ 40 - 5 ]
echo $r

求余数
r=$[ 100 % 43 ]
echo $r

乘幂 (如 2 的 3 次方)
r=$(( 2 ** 3 ))
r=$[ 2 ** 3 ]
echo $r
注:expr 沒有乘幂

 

4、使用let 命令

加法:
n=10
let n=n+1
echo $n #n=11

乘法:
let m=n*10
echo $m

除法:
let r=m/10
echo $r

求余数:
let r=m%7
echo $r


乘冪:
let r=m**2
echo $r

虽然Bash shell 有四种算术运算方法,但并不是每一种都是跨平台的,建议使用expr。
另外,我们在 script 中经常有加1操作,以下四法皆可:
m=$[ m + 1]
m=`expr $m + 1`
m=$(($m + 1))
let m=m+1

 

Shell awk 循环求和

1. 简单求和

1
2
3
4
5
6
7
8
$ cat test .txt
11
22
33
44
55
$ awk '{sum += $1};END{print sum}' test .txt 
165

 

2. 特定列求和

1
2
3
4
5
6
7
8
$ cat test .txt
aa      11
bb      22
cc      33
aa      44
dd      55
$ awk '/aa/ {sum += $2};END {print sum}' test .txt
55

 

3. 求和、平均数、最大值、最小值

1
2
3
4
5
6
7
8
9
10
11
12
13
14
$ cat test .txt
aa      11
bb      22
cc      33
aa      44
dd      55
$ cat test .txt | awk '{sum += $2};END {print sum}'
165
$ cat test .txt | awk '{sum += $2};END {print sum/NR}'
33
$ cat test .txt | awk 'BEGIN {max=0} {if($2>max) max=$2 fi};END {print max}'
55
$ cat test .txt | awk 'BEGIN {min=999999999} {if($2<min) min=$2 fi};END {print min}'        
11

 

awk 浮点运算:

运算表达式: awk 'BEGIN{printf "%.6f\n", ( 10 / 3)}'

运算结果: 3.333333

 

PS:shell的内部算术运算符无法处理浮点数,所以当需要处理浮点数是,要用到外部工具(如awk)

 

 

参考推荐

Linux 之 shell 算术运算符

Linux 之 shell 比较运算符

Linux Shell 函数返回值

Linux shell脚本通过expect实现自动输入密码

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/sunboy_2050/article/details/79623776

智能推荐

Linux:如何安装RPM呢?_ruhe xiezai rpm-程序员宅基地

文章浏览阅读1.1k次。RPM 安装( install )安装就是 install 嘛!所以啰,使用 rpm 来安装就很简单啦!假设我要安装一个档名为 rp-pppoe-3.1-5.i386.rpm 的档案,那么我可以这样( 记得某些套件可能需要以系统管理员的身份来安装 ): [root@test root]# rpm -i rp-pppoe-3.1-5.i386.rpm不过,这样的参数其实无法显示安装的进度,所以,通常我们会这样下达安装指令:  另外,如果我们在安装的过程当中发现问题,或者已经知道会发生的_ruhe xiezai rpm

php gif动态验证码,PHP实现GIF图片验证码_php技巧-程序员宅基地

文章浏览阅读256次。这是一个用PHP生成GIF动画来实现动态图片验证码的程序,非常实用,是php用户注册登录界面经常需要用到的验证码程序,有需要GIF动态图片验证码功能的朋友可以收藏一下。第一步:创建ImageCode.php文件,验证码生成函数代码如下:0) // 屏蔽第一帧{for ($k = 0; $k < strlen($authstr); $k++){$colorRandom = mt_ra..._php动画验证码

Python字符串的相关操作和方法_2.在python中,设有 s = 'abc',则s.zfill(7)、s.center(7, ' -程序员宅基地

文章浏览阅读464次。Python字符串的相关操作和方法1.什么是字符串(str)容器型数据类型:将’‘或者""或者’’‘或者""""""作为容器标志,引号中的每个符号就是字符串的元素。作为容器标志,引号中每个符号就是字符串的元素。(’’’’’'和"""""""在表示字符串内容的时候换行可以不适用转义字符,而是直接按回车)字符串不可变:不支持增删改,字符串有序(支持下标操作)字符串对元素的要求:引号中单独的每个符号都是字符串的元素(又叫字符),字符可以任何符号。字符串分为两类:普通字符(表示符号本身字符),转义字符(_2.在python中,设有 s = 'abc',则s.zfill(7)、s.center(7, ' ')、s.ljust(7)、s.rj

C++报错:error: return type specification for constructor invalid-程序员宅基地

文章浏览阅读6.1k次,点赞8次,收藏6次。类的构造函数不需要返回类型,即将void orbclass();前面的void去掉即可。_return type specification for

librosa的安装_conda安装liborsa指定源-程序员宅基地

文章浏览阅读4.8k次。在很多设计到语音识别合成等方面的项目里经常用到python的一个包librosa但是这个包直接用pip安装容易出现GCC的CXXABI一些各种各样的问题推荐使用conda安装但是conda的源在国外下面这个是conda换源的命令其中 https://example.com 可以随意更换底部的源conda config --add channels https://e_conda安装liborsa指定源

神器!这个Python神器竟能把图片视频无损清晰放大N倍!-程序员宅基地

文章浏览阅读1k次。文 |闲欢来源:Python 技术「ID: pythonall」最近在浏览 GitHub 的时候,偶然发现了一个非常牛逼的开源库,利用机器学习算法竟然把图片无损放大 N 倍,简直逆天!这个库叫做 video2x,目前有 4300+ 颗星星,是基于 waifu2x,Anime4K,SRMD 和 RealSR 开发的工具,不仅支持视频无损放大,还可以支持图片和 GIF 动画..._video2x源码怎么用

随便推点

异步FIFO的设计_异步fifo 时序-程序员宅基地

文章浏览阅读1.1k次。一、FIFO概述 FIFO,本质上来说还是一个RAM,是一种先进先出的数据缓存器,它主要应用于FPGA中不同时钟域之间的切换、不同位宽之间的数据匹配、数据的缓存等方面,极大提高了数据传输的效率。根据FIFO工作的时钟域分为同步/异步FIFO,同步FIFO是指读时钟和写时钟为同一个时钟,在时钟沿来临时同时发生读写;异步FIFO读写时钟不一致,读写相互独立。二、设计原理..._异步fifo 时序

layui.msg弹出设置时间_layui msg 时间-程序员宅基地

文章浏览阅读5.5k次。layer.msg(data.msg, {icon: 6,time:2000, shade:0.4});弹出时间两秒 有遮罩层_layui msg 时间

docker实例化Oracle12c EE(五分钟快速部署oracle12c单实例)_docker compose oracle 12 ee-程序员宅基地

文章浏览阅读1.2k次。### Code ReferenceURL:https://blog.csdn.net/hunheidaode/article/details/104039719DESC:docker实例化Oracle12c EELast Update:2020-7-15 18:25确定使用的镜像docker search oracledocker pull absolutapps/oracle-12c-ee本地化容器文件docker inspect absolutapps/oracle_docker compose oracle 12 ee

harmonyos2.0手机上手,上手体验如何?华为鸿蒙OS 2.0测试版推送-程序员宅基地

文章浏览阅读210次。原标题:上手体验如何?华为鸿蒙OS 2.0测试版推送前不久,华为开启了新一轮的鸿蒙手机系统测试招募,花粉俱乐部里有不少网友都获得了测试机会。在公测招募的帖子上方,有提到华为将于2021年04月27日的22:00-24:00,对当前支持OTA升级的手机推送华为HarmonyOS 2.0开发者Beta版。目前,已经有不少用户收到了华为HarmonyOS的推送,开发者版本的公测正式开启。而且根据各个机型..._手机harmonyos怎么玩

HTML表格标签和列表标签20200424_静态网页表格有几个标签-程序员宅基地

文章浏览阅读139次。表格标签基本语法 <table> <tr> <td>单元格1</td> <td>单元格2</td> </tr> <tr> <td>单元格3</td>..._静态网页表格有几个标签

变量向导添加控件变量Control类别和Value类别差别_control和value类型区别-程序员宅基地

文章浏览阅读526次。Control类别:控件的实例 Value类别:与控件绑定的值每个控件最多只能有一个Value型和一个Control型的成员变量,前者代表着控件的值,而后者代表着控件本身如果只想设置或获取控件内部存储的值,选择添加一个Value型的变量;如果想在运行时对控件的各种属性进行控制,那么选择添加一个Control型的变量。常见的Value型变量有int、UINT、long、DWORD、float、double、BYTE、short、BOOL、CString、CTime、COleDateTime和C.._control和value类型区别

推荐文章

热门文章

相关标签