shell基础-bash变量-数值运算与运算符

在Linux的shell中,变量的值的类型默认是字符串,不能直接进行数值运算。

[root@localhost ~]# a=9
[root@localhost ~]# b=15
[root@localhost ~]# c=$a+$b
[root@localhost ~]# echo $c
9+15

要想对变量进行数值运算,需要采用特殊的方法。

1. declare声明变量类型

命令格式:declare [+/-] [选项] 变量名

选项:

-   给变量设定类型属性。
+   取消变量的类型属性。
-i  将变量声明为整型(integer)。
-x  将变量声明为环境变量。
-p  查看变量被声明的类型。

示例:

[root@localhost ~]# a=11
[root@localhost ~]# b=22
[root@localhost ~]# declare -i c=$a+$b
[root@localhost ~]# echo $c
33
[root@localhost ~]# declare -p a
declare -- a="11"
[root@localhost ~]# declare -p c
declare -i c="33"

2. expr或let数值运算工具

注意:expr后面要有空格。

示例:

[root@localhost ~]# a=11
[root@localhost ~]# b=22
[root@localhost ~]# d=$(expr $a + $b)
[root@localhost ~]# echo $d
33

注意:+ 号左右两侧必须要有空格,否则会变成字符串拼接或者报错。

$()的作用是优先执行括号内的命令,并将命令的执行结果保存在内存中(而不是直接输出)。

3. (()) [表达式]

说明:括号内部两侧可以有空格,也可省略空格。

(()) [表达式] 的作用相同。

示例:

[root@localhost ~]# a=11
[root@localhost ~]# b=22
[root@localhost ~]# e=$(( $a + $b ))
[root@localhost ~]# echo $e
33

[root@localhost ~]# f=$[$a+$b]
[root@localhost ~]# echo $f
33

[root@localhost ~]# echo $(( (3+6)*2/9 ))
2

说明:+号左右两侧的空格也可省略。

总结: 在bash中进行数值运算,主要有以上三种方法。推荐使用第三种方法,因为它更加方便和灵活。

4. 运算符

Linux中的运算符主要有单目运算符和双目运算符,运算符也有优先级的高低之分。

运算符主要有以下这些:

优先级运算符类型说明
13+、-单目单目正、单目负。它们是单目运算符的正、负,而不是加、减。
12!、~单目逻辑非、按位取反或补码。
11*、/、%双目乘、除、取模。
10+、-双目加、减。
9<<、>>双目按位左移、按位右移。
8<、<=、>、>=双目小于、小于等于、大于、大于等于。
7==、!=双目等于、不等于。
6&双目按位与。
5^双目按位异或。
4|双目按位或。
3&&双目逻辑与。
2||双目逻辑或。
1=、+=、-=、*=、/=、%=、&=、^=、|=、<<=、>>=双目赋值、运算且赋值。

说明:对于该表,数值越大,优先级越高。故赋值运算符的优先级最低。

注意: 小括号内的表达式的优先级最高,会优先运算。因此,可以用小括号改变运算符的优先级。

优先级越高,会先进行运算;相同优先级的运算符,按照先后顺序顺序运算。

示例:

[root@localhost ~]# echo $(( (3+5)*6 ))
48

[root@localhost ~]# echo $(( 14%3 ))
2

[root@localhost ~]# echo $[ 1&&1 ]
1
[root@localhost ~]# echo $[ 2&&5 ]
1
[root@localhost ~]# echo $[ 2&&a ]
1
[root@localhost ~]# echo $[ a&&b ]
1
[root@localhost ~]# echo $[ a&&a0 ]
0
[root@localhost ~]# echo $[a0&&2 ]
0
[root@localhost ~]# echo $[ 0&&b ]
0
[root@localhost ~]# echo $[ 0&&0 ]
0
[root@localhost ~]# echo $[ a035&&2 ]
0
[root@localhost ~]# echo $[ a&&a30 ]
0
[root@localhost ~]# echo $[ a&&a24 ]
0
[root@localhost ~]# echo $[ a&&abc ]
0

[root@localhost ~]# echo $[ 0||0 ]
0
[root@localhost ~]# echo $[ ab || a2 ]
0
[root@localhost ~]# echo $[ 0||null ]
0
[root@localhost ~]# echo $[ 1||0 ]
1
[root@localhost ~]# echo $[ b||0 ]
1
[root@localhost ~]# echo $[ a||b ]
1
[root@localhost ~]# echo $[ 1||1 ]
1

说明:

对于逻辑与(&&)运算,只有当两侧的值都为非0时,整个表达式的值才为1。

对于逻辑或(||)运算,只有当两侧的值都为0时,整个表达式的值才为0。

在Linux中,代表0的情况,主要有三种:

  • 0
  • null
  • 超过1个字符的字符串,如:ab、abc、a2、a0等等。
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值