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-变量的数值运算符-计算双括号(())的使用的更多相关文章

  1. sed中使用shell变量

    假设希望在 file_to_modified 文件最后新增一行以下信息:传入 shell 脚本文件的第一个参数,以及当前时间(YYYY-MM-DD HH:MMS) date "+%Y-%m- ...

  2. linux shell “(())” 双括号运算符使用

    导读 在刚开始学习inux shell脚本编程时候,对于它的 四则运算以及逻辑运算.估计很多朋友都感觉比较难以接受.特变逻辑运算符"[]"使用时候,必须保证运算符与算数 之间有空格 ...

  3. linux shell (()) 双括号运算符使用

    估计很多朋友都感觉比较难以接受.特变逻辑运算符"[]"使用时候,必须保证运算符与算数 之间有空格. 四则运算也只能借助:let,expr等命令完成. 今天讲的双括号"(( ...

  4. [Shell]Bash变量:数值运算及运算符

    ------------------------------------------------------------------------------------------------- Sh ...

  5. 书写优雅的shell脚本(五)- shell中(())双括号运算符

    在使用shell的逻辑运算符"[]"使用时候,必须保证运算符与算数之间有空格. 四则运算也只能借助:let,expr等命令完成. 今天讲的双括号"(())"结构 ...

  6. Linux Shell编程,双括号运算符(())

    双括号运算符是shell非常强大的扩展. 这里简要介绍两种使用方式: 1.条件判断 跟在if.while.until,for等需要逻辑条件的命令后,进行逻辑判断 if(( expr));then … ...

  7. 双括号(()),shell与C++的桥梁

    使用语法: ((表达式))用来扩展Shell中的算术运算,以及赋值运算,扩展for,while,if条件测试运算. 注意点: 1.在双括号结构中,所有的表达式可以像c语言一样,如a++,b-- 2.在 ...

  8. shell if条件判断中:双中括号与单中括号的区别

    电脑重装了系统,登录虚拟机的shell脚本需重写,在为编写的脚本命名时发现存在同名脚本,才想起来是连接公司服务器的登录脚本,不想写俩脚本,怕记混了,那就整合一下.代码如下: #!/bin/bash#z ...

  9. shell单引号与变量、双引号与变量、如何在多重引号里面取到shell变量的值?

    如何在多重引号里面取到shell变量的值? 双引号是不会屏蔽对变量和某些特殊符号的转义的,而单引号里的所有内容都会原封不动的输出,而单引号里再用单引号将变量引起来,变量就又可以正常的显示,有点像数学里 ...

随机推荐

  1. 2020年的UWP——通过Radio类控制Cellular(1)

    最近在做UWP的项目,在2020年相信这已经是相对小众的技术了,但是在学习的过程中,发现某软这么几年仍然添加了不少的API,开放了相当多的权限.所以打算总结一下最近的一些经验和收获,介绍一下2020年 ...

  2. JDK15就要来了,你却还不知道JDK8的新特性!

    微信搜「烟雨星空」,白嫖更多好文. 现在 Oracle 官方每隔半年就会出一个 JDK 新版本.按时间来算的话,这个月就要出 JDK15 了.然而,大部分公司还是在使用 JDK7 和 8 . 之前去我 ...

  3. Template DB MySQL学习总结

    Zabbix 5.0下如何应用Template DB MySQL来监控MySQL数据库呢?下面简单整理一下如何配置.应用Zabbix下自带的模板Template DB MySQL.其实非常简单. Te ...

  4. [java]将多个文件压缩成一个zip文件

    此文进阶请见:https://www.cnblogs.com/xiandedanteng/p/12155957.html 方法: package zip; import java.io.Buffere ...

  5. postgres 无法删除表

    起因 在postgress下删除表的时候报错 解决 简单的百度了一下,有些人说是用户权限的问题,需要切换到库的拥有者下删除,但是切换后还是没有解决··· 最后换了一种方式搜索,不直接搜索报错命令,直接 ...

  6. leetcode刷题-64最小路径和

    题目 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入:[  [1,3,1],  [1,5, ...

  7. Oracle命令类别

    Oracle命令类别: 数据操纵语言:DML: select; insert; delete; update; merge. 数据定义语言:DDL: create; alter; drop; trun ...

  8. 利用 QEMU USER 模式运行 mips 程序

    摘要 关键字: qemu mips 前述 QEMU是一个处理器模拟软件,可以用来在PC中模拟ARM.MIPS等多种架构的软硬件运行环境.QEMU主要有两种模拟模式: User Mode System模 ...

  9. CentOS6.10下安装MongoDB和Redis

    安装mongodb 首先考虑离线安装,但是安装过程中在启动服务的时候出现了问题,centOS出于稳定原因考虑,系统自带的glibc版本过低, 而编译需要使用较高版本,这个问题我查询了一下,需要升级gl ...

  10. JVM_02 类加载子系统

    JVM细节版架构图 本文针对Class Loader SubSystem这一块展开讲解类加载子系统的工作流程 类加载子系统作用 1.类加载子系统负责从文件系统或者网络中加载class文件,class文 ...