shell-变量的数值运算符-计算双括号(())的使用
1. 变量的数值计算
变量的数值计算常见的如下几个命令:
(())、let、expr、bc、$[]
1) (())用法:(此法很常用,且效率高)
执行简单的整数运算,只需将特定的算术表达式用 "$(("和"))"扩起
shell的算术运算符合都置于"$(("......."))"的语法中。这一语法如同双引号功能,除了内嵌双引号无需转义。
2. 下面举例
范例1:shell的算术运算实例如下:
[root@1-241 scripts]# ((a=1+2**3-4%3))
[root@1-241 scripts]# echo $a
8
[root@1-241 scripts]# b=$((1+2**3-4%3))
[root@1-241 scripts]# echo $b
8
[root@1-241 scripts]# echo $((1+2**3-4%3))
8
提示:上面是三种不同的变量计算定义和使用的方式。
[root@1-241 scripts]# echo $((a+=1)) #赋值运算符(相当于a=a+1)
9
[root@1-241 scripts]# echo $((a++))
9
[root@1-241 scripts]# echo $a
9
[root@1-241 scripts]# echo $((3>2)) #比较大小,3大于2,得出结果为1,在(())里比较大小,1为真,0为假
1
[root@1-241 scripts]# echo $((3<2)) #比较大小,3小于2,得出结果为0,在(())里比较大小,1为真,0为假
0
[root@1-241 scripts]# a=$((100*(100+1)/2))
[root@1-241 scripts]# echo $a
5050
提示:
1) **为幂运算:%为去模运算(就是除法当中取余数),加减乘除就不细说了
2) 上面涉及到的参数变量必须为整数(整型)。不能是小数(浮点数)或者字符串。后面的bc命令可以进行浮点数运算,但一般较少用到,下文会讲解。提醒下,你可以直接在shell脚本中使用上述命令进行计算。
3) echo $((a++))和echo $((a--))表示先输出a自身的值,然后在进行++ --的运算,echo $((++a)) 和 echo $((--a))表示先先进行++ --的运算,在输出a自身的值。
记忆方法:变量在前,先输出变量值,变量在后,就是先运算后输出变量的值。
范例2:--,++在变量前后的举例理解:
[root@1-241 scripts]# a=10
[root@1-241 scripts]# echo $a
10
[root@1-241 scripts]# echo $((a++)) #先输出a的值,因为a为10,所以输出10
10
[root@1-241 scripts]# echo $a #上面输出a的值后,a自赠1,因此a为11
11
[root@1-241 scripts]# echo $((a--))
11
[root@1-241 scripts]# echo $a
10
[root@1-241 scripts]# echo $((++a))
11
[root@1-241 scripts]# echo $((--a))
10
[root@1-241 scripts]# echo $a
10
范例3:定义变量计算的例子:
[root@1-241 scripts]# myvar=99
[root@1-241 scripts]# echo $(($myvar + 1 ))
100
[root@1-241 scripts]# echo $(( $myvar + 1 )) #( ( ) ) 两边有几个空格不敏感,也可以没有。
100
[root@1-241 scripts]# myvar=$(( $myvar + 1 )) #还可以赋值给变量然后输出变量。
[root@1-241 scripts]# echo $myvar
100
范例4:各种(())的计算命令行执行例子:
[root@1-241 scripts]# echo $(( 100 / 5 )) #除法,取商数
20
[root@1-241 scripts]# echo $(( 100 + 5 ))
105
[root@1-241 scripts]# echo $(( 100 * 5 ))
500
[root@1-241 scripts]# echo $(( 100 - 5 ))
95
[root@1-241 scripts]# echo $(( 100 ** 5 )) #次方
10000000000
[root@1-241 scripts]# echo $(( 100 % 5 )) #取模,余数
0
范例5:各种(())运算的shell脚本例子
[root@1-241 scripts]# cat test_shuangkuohao.sh
#!/bin/bash
a=6
b=2 echo "a-b=$(( $a - $b ))"
echo "a+b=$(( $a + $b ))"
echo "a*b=$(( $a * $b ))"
echo "a/b=$(( $a / $b ))"
echo "a**b=$(( $a ** $b ))"
echo "a%b=$(( $a %$b ))" 执行结果如下:
[root@1-241 scripts]# sh test_shuangkuohao.sh
a-b=4
a+b=8
a*b=12
a/b=3
a**b=36
a%b=0
范例6:把a、b两个变量通过命令行传参的方式实现上面的混合运算脚本的功能
[root@1-241 scripts]# cat test_shuangkuohao.sh
#!/bin/bash
a=$1
b=$2 echo "a-b=$(( $a - $b ))"
echo "a+b=$(( $a + $b ))"
echo "a*b=$(( $a * $b ))"
echo "a/b=$(( $a / $b ))"
echo "a**b=$(( $a ** $b ))"
echo "a%b=$(( $a %$b ))" 执行结果:
[root@1-241 scripts]# sh test_shuangkuohao.sh 6 2
a-b=4
a+b=8
a*b=12
a/b=3
a**b=36
a%b=0
拓展,请实现一个加,减,乘,除等功能的计算器,通过命令命令行传参的方式实现上面的结果
答案:
方法1:
[root@1-241 scripts]# cat d.sh
echo $(($1))
[root@1-241 scripts]# sh d.sh 4+2
6
[root@1-241 scripts]# sh d.sh 4*2
8
[root@1-241 scripts]# sh d.sh 4/2
2
[root@1-241 scripts]# sh d.sh 4-2
2 方法2:
[root@1-241 scripts]# cat j.sh
echo $(($1$2$3))
[root@1-241 scripts]# sh j.sh 4+2
6
[root@1-241 scripts]# sh j.sh 4-2
2
[root@1-241 scripts]# sh j.sh 4*2
8
[root@1-241 scripts]# sh j.sh 4/2
2
shell-变量的数值运算符-计算双括号(())的使用的更多相关文章
- sed中使用shell变量
假设希望在 file_to_modified 文件最后新增一行以下信息:传入 shell 脚本文件的第一个参数,以及当前时间(YYYY-MM-DD HH:MMS) date "+%Y-%m- ...
- linux shell “(())” 双括号运算符使用
导读 在刚开始学习inux shell脚本编程时候,对于它的 四则运算以及逻辑运算.估计很多朋友都感觉比较难以接受.特变逻辑运算符"[]"使用时候,必须保证运算符与算数 之间有空格 ...
- linux shell (()) 双括号运算符使用
估计很多朋友都感觉比较难以接受.特变逻辑运算符"[]"使用时候,必须保证运算符与算数 之间有空格. 四则运算也只能借助:let,expr等命令完成. 今天讲的双括号"(( ...
- [Shell]Bash变量:数值运算及运算符
------------------------------------------------------------------------------------------------- Sh ...
- 书写优雅的shell脚本(五)- shell中(())双括号运算符
在使用shell的逻辑运算符"[]"使用时候,必须保证运算符与算数之间有空格. 四则运算也只能借助:let,expr等命令完成. 今天讲的双括号"(())"结构 ...
- Linux Shell编程,双括号运算符(())
双括号运算符是shell非常强大的扩展. 这里简要介绍两种使用方式: 1.条件判断 跟在if.while.until,for等需要逻辑条件的命令后,进行逻辑判断 if(( expr));then … ...
- 双括号(()),shell与C++的桥梁
使用语法: ((表达式))用来扩展Shell中的算术运算,以及赋值运算,扩展for,while,if条件测试运算. 注意点: 1.在双括号结构中,所有的表达式可以像c语言一样,如a++,b-- 2.在 ...
- shell if条件判断中:双中括号与单中括号的区别
电脑重装了系统,登录虚拟机的shell脚本需重写,在为编写的脚本命名时发现存在同名脚本,才想起来是连接公司服务器的登录脚本,不想写俩脚本,怕记混了,那就整合一下.代码如下: #!/bin/bash#z ...
- shell单引号与变量、双引号与变量、如何在多重引号里面取到shell变量的值?
如何在多重引号里面取到shell变量的值? 双引号是不会屏蔽对变量和某些特殊符号的转义的,而单引号里的所有内容都会原封不动的输出,而单引号里再用单引号将变量引起来,变量就又可以正常的显示,有点像数学里 ...
随机推荐
- 项目实战 - 原理讲解<-> Keras框架搭建Mtcnn人脸检测平台
Mtcnn它是2016年中国科学院深圳研究院提出的用于人脸检测任务的多任务神经网络模型,该模型主要采用了三个级联的网络,采用候选框加分类器的思想,进行快速高效的人脸检测.这三个级联的网络分别是快速生成 ...
- javascript面试题(一)
1. var bar = null; console.log(typeof bar === 'object'); //logs true! 尽管 typeof bar === "object ...
- Java源码之HashMap的hash篇
提到哈希,我们脑袋中立马就会闪过一个方法,就是hashCode(),没错.就是这个! 我们知道HashMap是通过 数组+链表 的结构进行数据存储的,有数组就会有索引,而HashMap内的数据要存储在 ...
- 解决spark streaming集成kafka时只能读topic的其中一个分区数据的问题
1. 问题描述 我创建了一个名称为myTest的topic,该topic有三个分区,在我的应用中spark streaming以direct方式连接kakfa,但是发现只能消费一个分区的数据,多次更换 ...
- Express下ejs的视图模板引擎的建立
写在前面 由于Express升级到4.0,将ejs的用法忽略,改为用户自定义形式,所以要引入库index.js作为引擎,来支持ejs的模板引擎(点击下载). 首先是建立一个名字叫nodeitem,引擎 ...
- 配置静态 IP、网卡命名规范
一.网卡命名规范(设备类型 + 设备位置 + 数字) 设备类型: 格式 描述 en 以太网(Ethernet) ib 无限宽带(InfiniBand) sl 串列线路互联网协议(slip:Serial ...
- Java操作Elasticsearch 之 [Java High Level REST Clientedit]
1. 简述 Elasticsearch 是基于 Lucene 开发的一个分布式全文检索框架,向 Elasticsearch 中存储和从 Elasticsearch 中查询,格式是json. 向 Ela ...
- Oracle学习(十三)优化专题
一.查询频繁,数据量大 索引 使用时机:表中经常查询的字段可以考虑添加索引. 联合索引:若能确认多个条件会同时使用时,可以将这几个条件作为联合索引. 单列索引:若条件查询时,这几个条件不是同时用到的话 ...
- Shiro性能优化:解决Session频繁读写问题
目录 背景 应对思路 本地缓存 Session 避免不必要的 Session 更新 代码实现 ShiroSessionDAO.java ShiroConfig.java 背景 Shiro 提供了强大的 ...
- linux 重启服务器命令
Linux有如下的关机和重启命令:shutdown, reboot,poweroff, halt shutdown shutdown命令是大家都推荐的一个安全的命令,通过参数-h或-r的配合来完成关机 ...