您的位置:首页 > 教程 > linux > Shell(())实现对整数进行数学运算

Shell(())实现对整数进行数学运算

2022-06-19 18:49:38 来源:易采站长站 作者:

Shell(())实现对整数进行数学运算

双小括号(())是BashShell中专门用来进行整数运算的命令,它的效率很高,写法灵活,是企业运维中常用的运算命令。注意:(())只能进行整数运算,不能对小数(浮点数)或者字符串进行...vq4站长之家-易采站长站-Easck.Com

双小括号 (( )) 是 Bash Shell 中专门用来进行整数运算的命令,它的效率很高,写法灵活,是企业运维中常用的运算命令。vq4站长之家-易采站长站-Easck.Com

注意:(( )) 只能进行整数运算,不能对小数(浮点数)或者字符串进行运算。后续讲到的 bc 命令可以用于小数运算。vq4站长之家-易采站长站-Easck.Com
vq4站长之家-易采站长站-Easck.Com

Shell (( )) 的用法vq4站长之家-易采站长站-Easck.Com

双小括号 (( )) 的语法格式为:vq4站长之家-易采站长站-Easck.Com
((表达式))vq4站长之家-易采站长站-Easck.Com

通俗地讲,就是将数学运算表达式放在((和))之间。vq4站长之家-易采站长站-Easck.Com

表达式可以只有一个,也可以有多个,多个表达式之间以逗号,分隔。对于多个表达式的情况,以最后一个表达式的值作为整个 (( )) 命令的执行结果。vq4站长之家-易采站长站-Easck.Com

可以使用$获取 (( )) 命令的结果,这和使用$获得变量值是类似的。vq4站长之家-易采站长站-Easck.Com

表1:(( )) 的用法vq4站长之家-易采站长站-Easck.Com
vq4站长之家-易采站长站-Easck.Com

运算操作符/运算命令 说明 ((a=10+66)vq4站长之家-易采站长站-Easck.Com
((b=a-15))vq4站长之家-易采站长站-Easck.Com
((c=a+b)) 这种写法可以在计算完成后给变量赋值。以 ((b=a-15)) 为例,即将 a-15 的运算结果赋值给变量 c。vq4站长之家-易采站长站-Easck.Com
vq4站长之家-易采站长站-Easck.Com
注意,使用变量时不用加$前缀,(( )) 会自动解析变量名。 a=$((10+66)vq4站长之家-易采站长站-Easck.Com
b=$((a-15))vq4站长之家-易采站长站-Easck.Com
c=$((a+b)) 可以在 (( )) 前面加上$符号获取 (( )) 命令的执行结果,也即获取整个表达式的值。以 c=$((a+b)) 为例,即将 a+b 这个表达式的运算结果赋值给变量 c。vq4站长之家-易采站长站-Easck.Com
vq4站长之家-易采站长站-Easck.Com
注意,类似 c=((a+b)) 这样的写法是错误的,不加$就不能取得表达式的结果。 ((a>7 && b==c)) (( )) 也可以进行逻辑运算,在 if 语句中常会使用逻辑运算。 echo $((a+10)) 需要立即输出表达式的运算结果时,可以在 (( )) 前面加$符号。 ((a=3+5, b=a+10)) 对多个表达式同时进行计算。 vq4站长之家-易采站长站-Easck.Com

在 (( )) 中使用变量无需加上$前缀,(( )) 会自动解析变量名,这使得代码更加简洁,也符合程序员的书写习惯。vq4站长之家-易采站长站-Easck.Com
vq4站长之家-易采站长站-Easck.Com

Shell (( )) 实例演示vq4站长之家-易采站长站-Easck.Com

【实例1】利用 (( )) 进行简单的数值计算。vq4站长之家-易采站长站-Easck.Com
vq4站长之家-易采站长站-Easck.Com

[c.biancheng.net]$ echo $((1+1))
2
[c.biancheng.net]$ echo $((6-3))
3
[c.biancheng.net]$ i=5
[c.biancheng.net]$ ((i=i*2)) #可以简写为 ((i*=2))。
[c.biancheng.net]$ echo $i  #使用 echo 输出变量结果时要加 $。
10

【实例2】用 (( )) 进行稍微复杂一些的综合算术运算。vq4站长之家-易采站长站-Easck.Com
vq4站长之家-易采站长站-Easck.Com

[c.biancheng.net]$ ((a=1+2**3-4%3))
[c.biancheng.net]$ echo $a
8
[c.biancheng.net]$ b=$((1+2**3-4%3)) #运算后将结果赋值给变量,变量放在了括号的外面。
[c.biancheng.net]$ echo $b
8
[c.biancheng.net]$ echo $((1+2**3-4%3)) #也可以直接将表达式的结果输出,注意不要丢掉 $ 符号。
8
[c.biancheng.net]$ a=$((100*(100+1)/2)) #利用公式计算1+2+3+...+100的和。
[c.biancheng.net]$ echo $a
5050
[c.biancheng.net]$ echo $((100*(100+1)/2)) #也可以直接输出表达式的结果。
5050

【实例3】利用 (( )) 进行逻辑运算。vq4站长之家-易采站长站-Easck.Com
vq4站长之家-易采站长站-Easck.Com

[c.biancheng.net]$ echo $((3<8)) #3<8 的结果是成立的,因此,输出了 1,1 表示真
1
[c.biancheng.net]$ echo $((8<3)) #8<3 的结果是不成立的,因此,输出了 0,0 表示假。
0
[c.biancheng.net]$ echo $((8==8)) #判断是否相等。
1
[c.biancheng.net]$ if ((8>7&&5==5))
> then
> echo yes
> fi
yes

最后是一个简单的 if 语句的格式,它的意思是,如果 8>7 成立,并且 5==5 成立,那么输出 yes。显然,这两个条件都是成立的,所以输出了 yes。vq4站长之家-易采站长站-Easck.Com

【实例4】利用 (( )) 进行自增(++)和自减(--)运算。vq4站长之家-易采站长站-Easck.Com
vq4站长之家-易采站长站-Easck.Com

[c.biancheng.net]$ a=10
[c.biancheng.net]$ echo $((a++)) #如果++在a的后面,那么在输出整个表达式时,会输出a的值,因为a为10,所以表达式的值为10。
10
[c.biancheng.net]$ echo $a #执行上面的表达式后,因为有a++,因此a会自增1,因此输出a的值为11。
11
[c.biancheng.net]$ a=11
[c.biancheng.net]$ echo $((a--)) #如果--在a的后面,那么在输出整个表达式时,会输出a的值,因为a为11,所以表达式的值的为11。
11
[c.biancheng.net]$ echo $a #执行上面的表达式后,因为有a--,因此a会自动减1,因此a为10。
10
[c.biancheng.net]$ a=10
[c.biancheng.net]$ echo $((--a)) #如果--在a的前面,那么在输出整个表达式时,先进行自增或自减计算,因为a为10,且要自减,所以表达式的值为9。
9
[c.biancheng.net]$ echo $a #执行上面的表达式后,a自减1,因此a为9。
9
[c.biancheng.net]$ echo $((++a)) #如果++在a的前面,输出整个表达式时,先进行自增或自减计算,因为a为9,且要自增1,所以输出10。
10
[c.biancheng.net]$ echo $a #执行上面的表达式后,a自增1,因此a为10。
10

本教程假设读者具备基本的编程能力,相信读者对于前自增(前自减)和后自增(后自减)的区别也非常清楚,这里就不再赘述,只进行简单的说明:vq4站长之家-易采站长站-Easck.Com

执行 echo $((a++)) 和 echo $((a--)) 命令输出整个表达式时,输出的值即为 a 的值,表达式执行完毕后,会再对 a 进行 ++、-- 的运算;
而执行 echo $((++a)) 和 echo $((--a)) 命令输出整个表达式时,会先对 a 进行 ++、-- 的运算,然后再输出表达式的值,即为 a 运算后的值。

【实例5】利用 (( )) 同时对多个表达式进行计算。vq4站长之家-易采站长站-Easck.Com
vq4站长之家-易采站长站-Easck.Com

[c.biancheng.net]$ ((a=3+5, b=a+10)) #先计算第一个表达式,再计算第二个表达式
[c.biancheng.net]$ echo $a $b
8 18
[c.biancheng.net]$ c=$((4+8, a+b)) #以最后一个表达式的结果作为整个(())命令的执行结果
[c.biancheng.net]$ echo $c
26

到此这篇关于Shell(())实现对整数进行数学运算的文章就介绍到这了,更多相关Shell(()) 整数运算内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

如有侵权,请联系QQ:279390809 电话:15144810328

相关文章

  • Linux下用GHOST来做系统备份

    Linux下用GHOST来做系统备份

    在Windows系统下备份我们可以用GHOST工具软件完成,Linux系统不能完全依赖于GHOST工具,一则是GHOST本身是有版权的软件,二是GHOST只支持ext2、ext3文件系统的Linux分区,不支持reiserfs、xfs等
    2019-10-25
  • 给 FreeBSD 12.1 安装 GNOME3 图形界面

    给 FreeBSD 12.1 安装 GNOME3 图形界面

    FreeBSD是一个完全开放的、安全的系统,可以Do it yourself的系统。但是个人还是不喜欢呆板的命令行界面,所有就给 FreeBSD 12.1 安装 GNOME3 图形界面。 开始操作,启动FreeBSD 12.1,以root身份
    2019-10-27
  • Ubuntu Studio一个不错的操作系统

    Ubuntu Studio一个不错的操作系统

    Ubuntu Studio 是一个基于 Ubuntu 而面向音频、视频及图形爱好者的操作系统。本次推出的 Ubuntu Studio 为 7.04 版,目前仅支持 Intel i386 兼容的处理器。 Ubuntu Studio 从大量的开源多媒体创作程序
    2019-10-25
  • 最受欢迎的10款Linux免费游戏

    最受欢迎的10款Linux免费游戏

    图为在Linux下运行的免费游戏America's Army 如果你认为 Linux下没有什么好游戏的话,那就错了!我们来看看Linux下最受欢迎的10款游戏吧,而且这些游戏都是完全免费的! # skyreal update(06-12
    2019-10-25
  • compiz fusion特效使用心得(附3D桌面图)

    compiz fusion特效使用心得(附3D桌面图)

    3D桌面图 LINUX发行版就是好,当大多数人还在沉迷于那些什么风格图标鸟玻璃效果甚至孜孜不倦津津乐道的时候,Linux的高手们已经悄悄为我们开启了一个桌面系统3D的时代。 当我第一次
    2019-10-25
  • Ubuntu 下aMule 的安装配置

    Ubuntu 下aMule 的安装配置

    aMule 是一个类似于 eMule 的多平台 P2P 客户端程序。以下将简略叙述 aMule 在 Ubuntu 中的安装及配置 [High ID] 与 [KAD] 的过程。 安装: sudo apt-get install amule sudo apt-get install amule-utils 如果需要
    2019-10-25
  • JMeter jp@gc - stepping thread group插件

    JMeter jp@gc - stepping thread group插件

    这是一个出单接口压力测试的小例子,了解一下压力测试最最基础的基础。出单接口是用来保险出单的,不需要在UI界面下一步下一步的出单,接口一调数据入库完事~~~。再啰嗦一句接
    2019-10-27
  • Ubuntu 下使用K3B软件刻录光盘(图)

    Ubuntu 下使用K3B软件刻录光盘(图)

    不知大家会不会在Ubuntu下刻录光盘呢?k3b是KDE环境下的一个CD/DVD刻录软件,有非常容易使用的界面,功能比较齐全。用起来感觉就象是win下的Nero一样简单自然,比ubuntu里原来的刻录CD方式
    2019-10-25