之前我们看了开胃菜: shell 多进程,这次我们来看看bash 变量部分类型
虽然bash
是脚本语言,我们可以直接使用而无需提前声明,但是内部都是有类型的,举个例子,在bash
中,有2中数组类型
,一种是我们熟知的传统数组,一种是类似于hash map
,我们如何去辨别呢? 再例如,我们在bash
进行算术运算时,我们定义的到底是字符类型,还是数字类型呢? 所以,脚本语言有类型,在需要的时候,会先申明类型,再使用变量。
我们想讲的bash变量
我们会从以下几个方面介绍bash
变量,本次只介绍几种,只读变量、整形变量、数组(索引/字符)
只读变量
我们在编写shell
过程中,可以使用readonly
/declare -r
来定义只读变量类型,在定义后,我们不能进行修改和删除
例如如下例子
我们在保存执行后
我们可以看到,对于普通变量,我们做更改和删除都是成功了的,对于只读变量,我们更改和删除都是失败了的
那对于只读变量,我们什么时候需要呢? 我们定义后不会修改的变量,可以使用只读变量来代替,例如: 脚本中的数据库账号和密码等
整形变量
我们可以使用declare -i
申请为整形变量,在shell
中,默认是字符变量
,例如我们在执行计算的时候,会出现这样的情形
例如
我们执行该脚本后得知
这是因为bash
默认类型为字符
,所以1+1
会被判断为字符串相加,当然会以追加的形式来赋值给变量
若我们定义为整形变量,则会进行相关运算,然后将结果赋值给变量,其实在shell
脚本中还有其他运算方法,比如在脚本中嵌套bc
命令,例如: echo "1 +2" | bc
实际例子
我们统计/etc
目录下文件(不递归子目录),中带有shell
的字眼,并且统计出来
脚本
执行结果为
我们随便抽一个出来看下
个数的确为7
数组类型
我们一般使用declare -a
来定义数组(索引式),在bash
中,数组长度不用指定,直接使用即可,甚至于,你都可以不定义数组类型,而直接使用(不太建议),我感觉它不应该叫做数组,而应该叫做索引式字典,因为它使用多少,占用多少,而不是用下标来决定的
数组一般操作
执行
字典变量
我们一般使用declare -A
来定义数组(字符串式),这个在bash
中,也称为数组,不过它更像字典了,该类型必须要先申明再使用,我们按照上面的例子写一个
执行
实际例子
假设对于如下test
文件
我们想统计出每次词出现的次数
输出结果为
总结
shell
上手极快,只要会基础命令,即可编写shell
,但是我们也有需要注意的地方,解释型脚本语言,不太好理解,我们要尽量做好注释,尽量先定义后使用(虽然经常不这么干),还有就是尽量对自己“不自信”,在写shell
脚本的时候,因为是脚本语言,所以约束极低,更可能出现为止的"bug",我们要认真对待才行,要不自信判断,特别是在删除之前,要判断文件/目录是否存在,存在才删除。