当前位置:   article > 正文

14 liunx shell基础 linux进行数值运算的三种方法;declare;expr或let进行数值运算;$[] ; $(()) ;运算符以及优先级;_declare let expr

declare let expr


在这里插入图片描述

数值运算

linux默认 所有变量赋值均为字符串;

[userwin@MiWiFi-R3L-srv ~]$ a=100
[userwin@MiWiFi-R3L-srv ~]$ b=50
[userwin@MiWiFi-R3L-srv ~]$ c=$a+$b
[userwin@MiWiFi-R3L-srv ~]$ echo $c
100+50
  • 1
  • 2
  • 3
  • 4
  • 5

linux 进行数值运算的方法

  • declare -i 将变量声明为数值类型
  • expr或let数值运算工具
  • $[运算公式] 或 $(()) 可以直接进行数值运算操作 推荐使用,简单方便

1、declare :声明变量类型; declare -i 将变量声明为数值类型

语法格式: declare [参数] [目录]

常用参数

参数作用
-给变量设定类型属性
+取消变量的类型属性
-i将变量声明为整数型,integer类型
-x将变量声明为环境变量(相当于export)
-p显示指定变量被声明类型,查看变量属性值
-r将变量声明为只读变量
-a将变量声明为数组变量

declare -p

# 接上面示例
# declare -p
[userwin@MiWiFi-R3L-srv ~]$ declare -p a
declare -- a="100"
[userwin@MiWiFi-R3L-srv ~]$ declare -p b
declare -- b="50"
[userwin@MiWiFi-R3L-srv ~]$ declare -p c
declare -- c="100+50"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

declare -i

# declare -i
[userwin@MiWiFi-R3L-srv ~]$ declare -i c=100+50
[userwin@MiWiFi-R3L-srv ~]$ echo $c
150
  • 1
  • 2
  • 3
  • 4

declare +

# export c 将变量c设置为环境变量并查看其属性
[userwin@MiWiFi-R3L-srv ~]$ export c
[userwin@MiWiFi-R3L-srv ~]$ declare -p c
declare -ix c="150"
  • 1
  • 2
  • 3
  • 4
# declare + 取消变量c的环境变量属性
[userwin@MiWiFi-R3L-srv ~]$ declare +x c
[userwin@MiWiFi-R3L-srv ~]$ declare -p c
declare -i c="150"
  • 1
  • 2
  • 3
  • 4

declare -

# declare - 将变量c添加到环境变量;或者说为变量c添加环境变量属性
[userwin@MiWiFi-R3L-srv ~]$ declare -x c
[userwin@MiWiFi-R3L-srv ~]$ declare -p c
declare -ix c="150"
  • 1
  • 2
  • 3
  • 4

declare -r

变量只读属性不能使用declare + 取消;只读变量使用功能unset也无法删除
如果变量被设置成只读,变量为临时变量时,重启系统就会没有了

#  declare -r 将变量c设置为只读变量,当修改时会报错
[userwin@MiWiFi-R3L-srv ~]$ declare -r c
[userwin@MiWiFi-R3L-srv ~]$ declare -p c
declare -ir c="150"
[userwin@MiWiFi-R3L-srv ~]$ c=250
-bash: c: 只读变量
# 变量只读属性不能使用declare + 取消
[userwin@MiWiFi-R3L-srv ~]$ declare +r c
-bash: declare: c: 只读变量
# 只读变量使用功能unset也无法删除
[userwin@MiWiFi-R3L-srv ~]$ unset c
-bash: unset: c: 无法反设定: 只读 variable
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

declare -a

[userwin@MiWiFi-R3L-srv ~]$ ary[0]=a1
[userwin@MiWiFi-R3L-srv ~]$ ary[1]=a2
[userwin@MiWiFi-R3L-srv ~]$ ary[2]=a3
[userwin@MiWiFi-R3L-srv ~]$ declare -a ary
[userwin@MiWiFi-R3L-srv ~]$ echo $ary
a1
# 下面是错误示范,输出是不对的
[userwin@MiWiFi-R3L-srv ~]$ echo $ary[1]
a1[1]
[userwin@MiWiFi-R3L-srv ~]$ echo ${ary[1]}
a2
[userwin@MiWiFi-R3L-srv ~]$ echo ${ary[2]}
a3
[userwin@MiWiFi-R3L-srv ~]$ echo ${ary[*]}
a1 a2 a3
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

2、expr或let数值运算工具

expr 表示式在数值运算上的应用

[userwin@MiWiFi-R3L-srv ~]$ echo aa
aa
[userwin@MiWiFi-R3L-srv ~]$ echo $a
100
[userwin@MiWiFi-R3L-srv ~]$ echo $b
50
[userwin@MiWiFi-R3L-srv ~]$ d=$(expr $a+$b)
[userwin@MiWiFi-R3L-srv ~]$ echo $d
100+50
#注意 + 左右必须有空格
[userwin@MiWiFi-R3L-srv ~]$ d=$(expr $a + $b)
[userwin@MiWiFi-R3L-srv ~]$ echo $d
150
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

let数值运算

[userwin@MiWiFi-R3L-srv ~]$ let a++
[userwin@MiWiFi-R3L-srv ~]$ echo $a
101
[userwin@MiWiFi-R3L-srv ~]$ let b--
[userwin@MiWiFi-R3L-srv ~]$ echo $b
49
[userwin@MiWiFi-R3L-srv ~]$ let a+=5
[userwin@MiWiFi-R3L-srv ~]$ echo $a
106
[userwin@MiWiFi-R3L-srv ~]$ let b-=5
[userwin@MiWiFi-R3L-srv ~]$ echo $b
44
[userwin@MiWiFi-R3L-srv ~]$ let e=$a+$b
[userwin@MiWiFi-R3L-srv ~]$ echo $e
150

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16

3、$[运算公式] 或 $(()) 可以直接进行数值运算操作

[userwin@MiWiFi-R3L-srv ~]$ f=$[a+b]
[userwin@MiWiFi-R3L-srv ~]$ echo $f
150
[userwin@MiWiFi-R3L-srv ~]$ f=$[f+1]
[userwin@MiWiFi-R3L-srv ~]$ echo $f
151
[userwin@MiWiFi-R3L-srv ~]$ f=$[f-1]
[userwin@MiWiFi-R3L-srv ~]$ echo $f
150

[userwin@MiWiFi-R3L-srv ~]$ echo $(( 13 % 3 ))
1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

算术运算符

优先级越大;数值越高。
在这里插入图片描述
只要把你要计算内容放入 $[] 或 $(())中;你就不用在考虑优先级了

[userwin@MiWiFi-R3L-srv ~]$ aa=$[(10+20)/10%2]
[userwin@MiWiFi-R3L-srv ~]$ echo $aa
1
[userwin@MiWiFi-R3L-srv ~]$ bb=$(((10+20)/10%2))
[userwin@MiWiFi-R3L-srv ~]$ echo $bb
1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

倘若此文对你有帮助,点赞,评论,转发。谢谢

我醉欲眠卿且去,明朝有意抱琴来。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/360081
推荐阅读
相关标签
  

闽ICP备14008679号