到我的Linux笔记的29节,Tony老师的Shell变量课程学完了,从本节开始学习Shell运算符课程。
[1]总的declare声明变量类型
前面学过Shell是一个弱类型的语言,默认情况下给变量赋什么值都是字符串型,不能直接进行数值运算。declare命令可以明确进行变量类型的声明。
declare [+/-] [变换选项] 变量名
*-i声明为整形
[root@localhost ~]# aa=11
[root@localhost ~]# bb=22
[root@localhost ~]# cc=$aa+$bb
[root@localhost ~]# echo $cc
11+22
[root@localhost ~]# declare -i cc=$aa+$bb
[root@localhost ~]# echo $cc
33
可以看到上面的变量cc声明为整形了,但aa和bb仍然是数值型,即便这样也可以正确进行数值运算,这是和其它语言不同的。
*-p查看类型
[root@localhost ~]# declare -p cc
declare -i cc="33"
[root@localhost ~]# declare -p aa
declare -- aa="11"
[2]声明数组变量
数组在Shell编程中用的不多,Shell编程中基本不用考虑效率,多数时候就是给管理员一个人用的,往往实现功能优先。
[root@localhost ~]# ary[0]=a0
[root@localhost ~]# ary[1]=a1
[root@localhost ~]# declare -a ary[2]=a2
[root@localhost ~]# ary[3]=a3
在Shell中只要用了下标,可以不用写declare -a声明,上面四条都是成功的。
[3]查看数组
和查看普通变量的方式有所不同,需要用大括号将变量括起来。
使用明确下标:
[root@localhost ~]# echo ${ary[1]}
a1
不使用下标,相当于下标为0:
[root@localhost ~]# echo ${ary}
a0
查看数组中所有元素:
[root@localhost ~]# echo ${ary[*]}
a0 a1 a2 a3
数组中的元素没有被单独保存成一个变量:
[root@localhost ~]# declare -p ary[3]
-bash: declare: ary[3]: not found
[root@localhost ~]# declare -p ary
declare -a ary='([0]="a0" [1]="a1" [2]="a2" [3]="a3")'
而是可以用-p去查看整个数组(不加下标)。
[4]声明环境变量
之前学习过用export去声明环境变量:
export 变量名=变量值
这只是简化命令,它实际上就是:
declare -x 变量名=变量值
如把aa转成环境变量并测试:
[root@localhost ~]# declare -p aa
declare -- aa="11"
[root@localhost ~]# export aa
[root@localhost ~]# declare -p aa
declare -x aa="11"
[5]声明变量只读属性(不常用)
[root@localhost ~]# declare -r aa
[root@localhost ~]# declare -p aa
declare -rx aa="11"
拥有只读属性的变量是不可以写的:
[root@localhost ~]# aa="12"
-bash: aa: readonly variable
也不可以用unset删除只读属性的变量:
[root@localhost ~]# unset aa
-bash: unset: aa: cannot unset: readonly variable
甚至也不能用+号把只读属性取消:
[root@localhost ~]# declare +r aa
-bash: declare: aa: readonly variable
也就是说一旦设置成只读,就完全不能对它操作了。好在这个变量只是临时生效的,系统一旦重启就消失了。但如果把这条命令写到环境变量配置文件中或者某个开机自动执行的文件中,它就会一直生效了,除非再去修改那个文件。
[6]-p查询变量的属性
如果后面不加具体的变量,就会查询系统中所有生效的变量的属性。