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变量的值? 双引号是不会屏蔽对变量和某些特殊符号的转义的,而单引号里的所有内容都会原封不动的输出,而单引号里再用单引号将变量引起来,变量就又可以正常的显示,有点像数学里 ...
随机推荐
- 2020年的UWP——通过Radio类控制Cellular(1)
最近在做UWP的项目,在2020年相信这已经是相对小众的技术了,但是在学习的过程中,发现某软这么几年仍然添加了不少的API,开放了相当多的权限.所以打算总结一下最近的一些经验和收获,介绍一下2020年 ...
- JDK15就要来了,你却还不知道JDK8的新特性!
微信搜「烟雨星空」,白嫖更多好文. 现在 Oracle 官方每隔半年就会出一个 JDK 新版本.按时间来算的话,这个月就要出 JDK15 了.然而,大部分公司还是在使用 JDK7 和 8 . 之前去我 ...
- Template DB MySQL学习总结
Zabbix 5.0下如何应用Template DB MySQL来监控MySQL数据库呢?下面简单整理一下如何配置.应用Zabbix下自带的模板Template DB MySQL.其实非常简单. Te ...
- [java]将多个文件压缩成一个zip文件
此文进阶请见:https://www.cnblogs.com/xiandedanteng/p/12155957.html 方法: package zip; import java.io.Buffere ...
- postgres 无法删除表
起因 在postgress下删除表的时候报错 解决 简单的百度了一下,有些人说是用户权限的问题,需要切换到库的拥有者下删除,但是切换后还是没有解决··· 最后换了一种方式搜索,不直接搜索报错命令,直接 ...
- leetcode刷题-64最小路径和
题目 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入:[ [1,3,1], [1,5, ...
- Oracle命令类别
Oracle命令类别: 数据操纵语言:DML: select; insert; delete; update; merge. 数据定义语言:DDL: create; alter; drop; trun ...
- 利用 QEMU USER 模式运行 mips 程序
摘要 关键字: qemu mips 前述 QEMU是一个处理器模拟软件,可以用来在PC中模拟ARM.MIPS等多种架构的软硬件运行环境.QEMU主要有两种模拟模式: User Mode System模 ...
- CentOS6.10下安装MongoDB和Redis
安装mongodb 首先考虑离线安装,但是安装过程中在启动服务的时候出现了问题,centOS出于稳定原因考虑,系统自带的glibc版本过低, 而编译需要使用较高版本,这个问题我查询了一下,需要升级gl ...
- JVM_02 类加载子系统
JVM细节版架构图 本文针对Class Loader SubSystem这一块展开讲解类加载子系统的工作流程 类加载子系统作用 1.类加载子系统负责从文件系统或者网络中加载class文件,class文 ...