在shell中所有变量默认为字符串类型,若不手动设置变量的类型,则所有数值都不能运算
[root@ localhost~]# aa = 11
[root@ localhost~]# bb = 22
[root@ localhost~]# cc = $aa + $bb
[root@ localhost~]# echo $cc
11 + 22
若需要数值运算,则可以采用下列三种方法
-
1.使用declare声明变量类型
[root@ localhost~]# declare [选项] 变量名
选项:
-:给变量设定类型属性
+:取消变量的类型属性
-a:将变量声明为数组型
-i:将变量声明为整数型(Integer)
-r:将变量声明为只读变量
-x:将变量声明为环境变量
-p:显示指定变量被声明的类型[root@ localhost~]# aa = 11 [root@ localhost~]# bb = 22 [root@ localhost~]# declare -i cc = $aa + $bb [root@ localhost~]# echo $cc 33
数组与变量类似,变量和数组都是用来保存数据的,只是变量只能被赋予一个数据值,一旦重复赋值,后一个值就会覆盖前一个值;而数组可以被赋予一组相同类型的数据值
[root@ localhost~]# declare -a name
name就会被认为是数组,虽然还未赋值,也不会被视为变量。如果没有把name变量声明为数组类型,只要在定义变量时采用了“变量名[下标]"的格式,这个变量就会被系统默认为数组类型
declare命令还可以把变量声明为环境变量,它和export命令的作用是一样的
[root@ localhost~]# declare -x test = 123
表示把变量test声明为环境变量
一旦给变量设定了只读属性,那么既不能修改该变量的值,也不能删除该变量,甚至不能使用”+r”选项取消只属性,例如:
[root@ localhost~]# declare -r test [root@ localhost~]# test = 456 bash:test: readonly variable [root@ localhost~]# declare +r test bash:declare:test:readonly variable [root@ localhost~]# unset test bash: unset: test: cannot unset: readonly variable
所有只有结束该shell,重新登录或重启,这个变量才会取消。
[root@ localhost~]# declare -p cc declare -i cc= "33"
表明cc变量是int类型
[root@ localhost~]# declare -p name declare -a name='([0]="zhang san" [1]="li ming" [2]="gao luo feng")'
表明name变量是数组型
-
2.使用expr和let命令
expr命令:[root@ localhost~]# aa = 11 [root@ localhost~]# bb = 22 [root@ localhost~]# dd = $(expr $aa + $bb) [root@ localhost~]# echo $dd 33
注意“+”左右必须有空格,否则运算不执行
let命令:
[root@ localhost~]# aa = 11 [root@ localhost~]# bb = 22 [root@ localhost~]# let ee = $aa + $bb [root@ localhost~]# echo $ee 33
-
3.使用“$(( 算术表达式 ))”运算
凡是使用let命令的地方都可使用(( 算术表达式 ))取代,但其中只能包含一个算术表达式[root@ localhost~]# aa = 11 [root@ localhost~]# bb = 22 [root@ localhost~]# ff = $(( $aa + $bb )) [root@ localhost~]# echo $ff 33