一.概述及declare命令
1.shell变量的缺点
- 弱类型
- 默认字符串型
2.declare声明变量类型
-
[root@localhost ~]# declare [+/-] [选项] 变量名
-
给变量设定类型属性+
取消变量的类型属性eg. -a
将变量声明为数组型eg. +a
取消变量声明为数组型-i
将变量声明为整数型(integer)-x
将变量声明为环境变量-r
将变量声明为只读变量【声明数值后不能修改删除或者取消只读属性】-p
显示指定变量的被声明的类型【参数不加变量名查看系统中所有变量的声明信息;加变量名查看系统中指定变量的声明信息】
-
把变量声明为数值型
[root@localhost ~]# aa=11 [root@localhost ~]# bb=22 #给变量aa和bb赋值 [root@localhost ~]# declare -i cc=$aa+$bb #声明变量cc的类型是整数型,它的值是aa和bb的和 declare -p cc #结果:declare -i cc="33"
-
声明数组变量
#定义数组 [root@localhost ~]# movie[0]=zp [root@localhost ~]# movie[1]=tp [root@localhost ~]# declare -a movie[2]=live #查看数组 [root@localhost ~]# echo ${movie} #zp [root@localhost ~]# echo ${movie[2]} #live [root@localhost ~]# echo ${movie[*]} #zp tp live
-
声明环境变量
declare -x test=123 #和export作用相似,但其实是declare命令的作用
二.数值运算方法
-
数值运算方法一
[root@localhost ~]# aa=11 [root@localhost ~]# bb=22 #给变量aa和bb赋值 [root@localhost ~]# declare -i cc=$aa+$bb #声明变量cc的类型是整数型,它的值是aa和bb的和
-
数值运算方法二(expr或let数值运算工具)
[root@localhost ~]# aa=11 [root@localhost ~]# bb=22 [root@localhost ~]# dd=$(expr $aa + $bb) #dd的值是aa和bb的和,注意“+”号左右两侧必须有空格
-
数值运算方法三(
$((运算式))或$[运算式]
)[root@localhost ~]# aa=11 [root@localhost ~]# bb=22 [root@localhost ~]# ff=$(($aa+$bb)) [root@localhost ~]# gg=$[$aa+$bb]
-
运算符(优先级数值大的优先级高)
优先级 运算符 说明 13 - + 单目负 单目正 12 ! ^ 逻辑非 按位取反或补码 11 * / % 乘 除 取模 10 + - 加 减 9 << >> 按位左移 按位右移 8 <= >= < > 小于等于 大于等于 小于 大于 7 == != 等于 不等于 6 & 按位与 5 ^ 按位异或 4 | 按位或 3 && 逻辑与 2 || 逻辑或 1 = += -= /= %= &= ^= |= <<= >>= 赋值,运算且赋值 #eg yy=$((4+9*3/5))#9 cc=$((1&0))#0 cc=$((1&&0))#0
三.变量测试
变量置换方式 | 变量y不存在 | 变量y为空值 | 变量y设置值 |
---|---|---|---|
x=${y-新值} | x=新值 | x为空 | x=$y |
x=${y:-新值} | x=新值 | x=新值 | x=$y |
x=${y+新值} | x为空 | x=新值 | x=新值 |
x=${y:+新值} | x为空 | x为空 | x=新值 |
x=${y:=新值} | x=新值 y=新值 | x为空 y=新值 | x=$y y值不变 |
x=${y=新值} | x=新值 y=新值 | x=新值 y=新值 | x=$y y值不变 |
x=${y?新值} | 新值输出到标准错误输出(就是屏幕) | x为空 | x=$y |
x=${y:?新值} | 新值输出到标准错误输出 | 新值输出到标准错误输出 | x=$y |
-
测试举例
#测试x=${y-新值} [root@localhost ~]# unset y #删除变量y [root@localhost ~]# x=${y-2} #测试 [root@localhost ~]# echo $x #2s #因为变量y不存在,所以x=新值