算术运算符——整数运算

算术运算符——整数运算

大家好,又见面了,我是全栈君。

shell中进行整数运算需要借助一些辅助工具,如:expr、declare、let、((  ))、$[  ]

1、expr有很多不完善之处,此处不写。

2、declare:

    declare -i 命令定义整形变量,当使用此命令对变量赋值后,变量便可进行算术运算。

    需要注意的是:

    如果给整形变量赋值的是一个字符串值,则bash会将变量赋值为0。

    使用declare -i命令生成的变量执行算术运算时,各变量之间不能有空格。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
test@kickseed:~$ declare -i m n
test@kickseed:~$ m=1
test@kickseed:~$ n=2
test@kickseed:~$ m+=1
test@kickseed:~$ n+=2
test@kickseed:~$ echo $m $n
2 4
test@kickseed:~$ m=m+n
test@kickseed:~$ echo $m
6
 
新声明一个整形变量d,进行计算
test@kickseed:~$ declare -i d
test@kickseed:~$ d=m+n
test@kickseed:~$ echo $d
10
 
使用一个未声明为整形的变量c,进行计算
test@kickseed:~$ c=m+n
test@kickseed:~$ echo $c
m+n
 
使用双引号:
test@kickseed:~$ a=3
test@kickseed:~$ b=2
test@kickseed:~$ m="a+ b "
test@kickseed:~$ echo $m
5

    直接执行declare -i 命令可以查看已经定义的整形变量

1
2
3
4
5
6
7
test@kickseed:~$ declare -i
……
declare -ir UID="1000"
declare -i a="8"
declare -i d="10"
declare -i m="6"
declare -i n="4"

    使用declare -i 命令声明变量后还可以用不同进制的数字表示十进制数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
第一种写法:
test@kickseed:~$ declare -i m
test@kickseed:~$ m=2#101
test@kickseed:~$ echo $m
5
test@kickseed:~$ m=8#17
test@kickseed:~$ echo $m
15
test@kickseed:~$ m=16#b
test@kickseed:~$ echo $m
11
 
第二种写法:
test@kickseed:~$ declare -i n=017   其中017中的0代表八进制
test@kickseed:~$ echo $n
15

3、let: let是bash shell的一个内建命令。可以help let查看帮助

1
2
3
4
5
6
7
test@kickseed:~$ i=5
test@kickseed:~$ let i=i+1
test@kickseed:~$ echo $i
6
test@kickseed:~$ let "i = i + 2"
test@kickseed:~$ echo $i
8

    需要注意的是: 使用let时,如果运算表达式没有使用双引号,则表达式之间不能有空格;如果使用了双引号,则表达式之间可以有空格。

建议使用双引号。

4、((  )) :let也可以用((  ))替换

1
2
3
4
5
6
7
8
9
10
test@kickseed:~$ i=3
test@kickseed:~$ ((i+=2))
test@kickseed:~$ echo $i
5
test@kickseed:~$ (( i+= 2))
test@kickseed:~$ echo $i
7
test@kickseed:~$ (( "i+= 2" ))
test@kickseed:~$ echo $i
9

    ((  ))还可以直接一步出结果,有无空格无影响。双括号中不可以使用变量

1
2
3
souche@kickseed:~$ i=2
souche@kickseed:~$ echo $((i+= 3 ))
5

5、$[  ]  中括号中有无空格无影响。中括号中可以使用变量

1
2
3
4
5
6
7
8
test@kickseed:~$ var=$[1+ 2 ]
test@kickseed:~$ echo $var
3
test@kickseed:~$ echo $[3+2]
5
test@kickseed:~$ m=2
test@kickseed:~$ echo $[$m +1 ]
3

常见运算符号:

wKioL1mo0JXDY4WpAANQHfDLodE638.png

let使用双引号时支持:

+ – * / % >> << & ^ | > < =  以及这些符号与=号结合的符号。并且还支持 == 和 !=。即支持上述图中常见运算符

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
test@kickseed:~$ echo $m $n
7 2
test@kickseed:~$ let "c=m==n"
test@kickseed:~$ echo $c
0
test@kickseed:~$ let "c=m!=n"
test@kickseed:~$ echo $c
1
souche@kickseed:~$ let "c=(3>2) || (4<= 1 )"
souche@kickseed:~$ echo $c
1
souche@kickseed:~$ let "c=(3>2) && (4<= 1 )"
souche@kickseed:~$ echo $c
0
souche@kickseed:~$ let "c=(3<2) || (4<= 1 )"
souche@kickseed:~$ echo $c
0

((  ))等同于let

$[]  支持

+ – * / % >> << & ^ | > < =  以及这些符号与=号结合的符号。并且还支持 == 和 !=。即支持上述图中常见运算符

1
2
3
4
souche@kickseed:~$ echo $[(3<
2
) || (4<= 1 )]
0
souche@kickseed:~$ echo $[(3>2) || (4<= 1 )]
1

declare -i声明整型变量后,需要使用双引号支持。

+ – * / % >> << & ^ | > < =  以及这些符号与=号结合的符号。并且还支持 == 和 !=。即支持上述图中常见运算符

1
2
3
4
5
6
7
souche@kickseed:~$ declare -i m
souche@kickseed:~$ m="(3>2) || (4<= 1 )"
souche@kickseed:~$ echo $m
1
souche@kickseed:~$ m="(3<2) || (4<= 1 )"
souche@kickseed:~$ echo $m
0

总结:

1、declare -i声明整型变量后,变量运算最好使用双引号。

2、let 进行算术运算最好也使用双引号。

3、(())  等同于let,不需要使用双引号

4、$[]  不需要使用双引号

    上面4中算术运算辅助符,按照总结的使用说明时,在双引号和括号中的表达式有无空格都无影响,最好统一不带空格。

    都支持:+ – * / % >> << & ^ | > < =  以及这些符号与=号结合的符号。并且还支持 == 和 !=。即支持上述图中常见运算符

本文转自 f_066 51CTO博客,原文链接:http://blog.51cto.com/ganmu/1961520,如需转载请自行联系原作者

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107871.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • java开发后端框架_java开发后端框架[通俗易懂]

    java开发后端框架_java开发后端框架[通俗易懂]1java开发后端框架java从推出到现在技术不断发展,语言也优化的越来越好,对于java工程师来说技术的不断发展,他们需要不断学习java进阶,而对于新手来说就能从基础到核心。那么新手该怎么学习呢?下面小编给大家说说java开发后端框架,希望能对你有些帮助。Struts在项目中的作用Struts在项目主要起控制作用,只要用于web层(即视图层和控制层)Struts本身是使用典型的MVC结构实现…

    2022年5月1日
    50
  • dubbo原理详解_dubbo的作用

    dubbo原理详解_dubbo的作用alibaba有好几个分布式框架,主要有:进行远程调用(类似于RMI的这种远程调用)的(dubbo、hsf),jms消息服务(napoli、notify),KV数据库(tair)等。这个框架/工具/产品在实现的时候,都考虑到了容灾,扩展,负载均衡,于是出现一个配置中心(ConfigServer)的东西来解决这些问题。基本原理如图: 在我们的系统中,经常会有一些跨

    2025年6月28日
    2
  • Tomcat国内镜像下载地址【速度超快】

    Tomcat国内镜像下载地址【速度超快】https://mirrors.cnnic.cn/apache/tomcat/ 选择想下载的版本,最新的就是那个tomcat-9 继续点进去 进去以后,要下载的可执行文件就在Bin目录下 exe结尾的就是安装文件了 …

    2022年5月18日
    43
  • datagrip mac 激活码_在线激活2022.02.16

    (datagrip mac 激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.net/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~FZ…

    2022年4月1日
    66
  • vim and python

    vim and python

    2021年8月23日
    58
  • 阿里,B站小伙伴刚刚分享的大数据开发运维学习规划,抓紧收藏

    一.大数据运维与架构课程体系1.0课程与老师介绍本课程是专门培养大数据运维与架构方向专业人才的体系化课程。课程所有讲师小伙伴全部是在职的知名企业大数据开发专家,大数据技术专家职位员工,非专门的培训机构老师(小伙伴当前在职企业阿里巴巴,哔哩哔哩,平安集团,苏宁易购,美团等,运维集群规模大到10000+节点,课程内容可以满足市面上80%以上企业的大数据运维工作)。课程以企业大数据集群运维实战和招聘需求为出发点,深入浅出,有重点地为大家系统化地讲解整个大数据运维需要的知识点,实战教学,多年运维经验分享

    2022年4月17日
    47

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号