bash 只读/整形/数组 类型操作

简介: bash 只读/整形/数组 类型操作

之前我们看了开胃菜: shell 多进程,这次我们来看看bash 变量部分类型

虽然bash是脚本语言,我们可以直接使用而无需提前声明,但是内部都是有类型的,举个例子,在bash中,有2中数组类型,一种是我们熟知的传统数组,一种是类似于hash map,我们如何去辨别呢? 再例如,我们在bash进行算术运算时,我们定义的到底是字符类型,还是数字类型呢? 所以,脚本语言有类型,在需要的时候,会先申明类型,再使用变量。


我们想讲的bash变量

我们会从以下几个方面介绍bash变量,本次只介绍几种,只读变量、整形变量、数组(索引/字符)



只读变量


我们在编写shell过程中,可以使用readonly/declare -r来定义只读变量类型,在定义后,我们不能进行修改和删除


例如如下例子


image.png



我们在保存执行后

image.png


我们可以看到,对于普通变量,我们做更改和删除都是成功了的,对于只读变量,我们更改和删除都是失败了的


那对于只读变量,我们什么时候需要呢? 我们定义后不会修改的变量,可以使用只读变量来代替,例如: 脚本中的数据库账号和密码等



整形变量


我们可以使用declare -i 申请为整形变量,在shell中,默认是字符变量,例如我们在执行计算的时候,会出现这样的情形

例如

image.png


我们执行该脚本后得知

image.png

这是因为bash默认类型为字符,所以1+1会被判断为字符串相加,当然会以追加的形式来赋值给变量

若我们定义为整形变量,则会进行相关运算,然后将结果赋值给变量,其实在shell脚本中还有其他运算方法,比如在脚本中嵌套bc命令,例如: echo "1 +2" | bc



实际例子

我们统计/etc目录下文件(不递归子目录),中带有shell的字眼,并且统计出来

脚本

image.png


执行结果为

image.png


我们随便抽一个出来看下

个数的确为7


image.png


数组类型


我们一般使用declare -a来定义数组(索引式),在bash中,数组长度不用指定,直接使用即可,甚至于,你都可以不定义数组类型,而直接使用(不太建议),我感觉它不应该叫做数组,而应该叫做索引式字典,因为它使用多少,占用多少,而不是用下标来决定的

数组一般操作

image.png


执行

image.png


字典变量

我们一般使用declare -A来定义数组(字符串式),这个在bash中,也称为数组,不过它更像字典了,该类型必须要先申明再使用,我们按照上面的例子写一个


image.png


执行

image.png



实际例子

假设对于如下test文件

image.png


我们想统计出每次词出现的次数

image.png

输出结果为

image.png



总结


shell上手极快,只要会基础命令,即可编写shell,但是我们也有需要注意的地方,解释型脚本语言,不太好理解,我们要尽量做好注释,尽量先定义后使用(虽然经常不这么干),还有就是尽量对自己“不自信”,在写shell脚本的时候,因为是脚本语言,所以约束极低,更可能出现为止的"bug",我们要认真对待才行,要不自信判断,特别是在删除之前,要判断文件/目录是否存在,存在才删除。





相关文章
|
7月前
|
存储 Shell 索引
如何在Bash中使用For循环和数组?
如何在Bash中使用For循环和数组?
120 0
|
11月前
|
运维 Shell
善用chatGPT学习 | bash脚本如何判断字符串在数组中
善用chatGPT学习 | bash脚本如何判断字符串在数组中
150 0
|
Shell Linux
bash shell 中数组使用举例
bash shell 中数组使用举例 一 背景 让我们先来看一个 shell 脚本的执行过程及结果: [gysl@gysl-DevOps ~]$ sh array.sh N2 N3 N4 The elements of this array 2-4 are: N2 N3 N4 N1 is in array.
1346 0
|
存储 Shell 索引
|
存储 Shell 索引