您的位置:首页 > 运维架构 > Shell

Linux学习日记 —— 10.5.1 Shell基础-Bash变量-数值运算与运算符

2018-03-06 22:08 1361 查看
在Linux的shell中,变量的值的类型默认是字符串,不能直接进行数值运算。

[root@localhost ~]# aa=11
[root@localhost ~]# b=22
[root@localhost ~]# c=$aa+$bb
[root@localhost ~]# echo $cc
11+22


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

1. declare声明变量类型

[root@localhost ~]# declare [+/-] [选项] 变量名
选项:
-   给变量设定类型属性。
+   取消变量的类型属性。
-i  将变量声明为整型(integer)。
-x  将变量声明为环境变量。
-p  查看变量被声明的类型。


方法1:declare声明变量类型

[root@localhost ~]# aa=11
[root@localhost ~]# bb=22
#给变量aa和bb赋值
[root@localhost ~]# declare -i cc=$aa+$bb
[root@localhost ~]# echo $cc
33


方法2:expr或let数值运算工具

注意:expr后面要有空格。

示例:
[root@localhost ~]# aa=11
[root@localhost ~]# bb=22
[root@localhost ~]# dd=$(expr $aa + $bb)
#注意"+"号左右两侧必须有空格
[root@localhost ~]# echo $dd
33


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

方法3. ((运算式))或[表达式]

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

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

示例:
[root@localhost ~]# aa=11
[root@localhost ~]# bb=22
[root@localhost ~]# ff=$(( $aa + $bb ))
[root@localhost ~]# echo $ff
33
[root@localhost ~]# gg=$[ $aa + $bb ]


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

总结:推荐使用第三种方法,因为它更加方便和灵活。

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
4000
$(( 14%3 ))
2

[root@localhost ~]# echo $[ 1&&1 ]
1

[root@localhost ~]# echo $[ 1&&0 ]
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 $[ a||b ]
1


说明:

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

对于逻辑或(||)运算,只有当两侧的值都为0时,整个表达式的值才为0。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  shell linux