6.4 数组与算数运算
目录
数组与算数运算
本节我们来学习 bash shell 编程的第四部分内容数组与算数运算。
1. 数组
数组和字典是编程中非常常用的数据结构,但是 bash 对它们支持都比较有限。原因我们在本章第一节就说过,bash 本质上并不能算一种语言,因此也很少被拿来做复杂的编程。它更适合利用 Linux 中已有的命令完成特定功能。所以 bash 对复杂数据结构的支持很有限。bash 4.0 之后才开始支持字典,默认也只支持一维数组。下面我们将通过数组的声明,赋值和引用来讲解数组的使用。
bash 中字典又称为关联数组,使用方式与数组基本一致,只是将数字索引改为,字符串索引即可
1.1 数组声明
数组和字典的声明:
- 数组声明:
declare -a
- 字典声明:
declare -A
, bash 4.0及以上才支持,必需显示声明
1.2 数组的赋值
bash 中的数组有多种赋值方式,常用的如下所示
赋值方式 | 语法 |
---|---|
一次只赋值一个元素 | a[0]=$RANDOM |
一次赋值全部元素 | a=(red blue yellow green) |
只赋值特定元素 | a=([0]=green [3]=red [2]=blue [6]=yellow) |
用户输入 | read -a ARRAY |
|
|
1.3 数组的访问
变量引用可以使用 ${VARIABLE}
,而数组的访问就是在此基础上添加上要访问的索引。需要特别注意的是数组引用 {}
不可省略,否则[index]
会被当作普通字符对待
- 用索引访问:
${ARRAY[index]}
${ARRAY}
: 没有下标时,默认引用索引为 0 的元素
- 访问整个数组:
${ARRAY[@]}
: 每个参数是一个独立的串${ARRAY[*]}
: 所有参数是一个串
- 数组切片:
${ARRAY[@]:offset:number}
: 取出偏移两之后特定数量的元素${ARRAY[@]:offset}
:取出偏移量后的所有元素${ARRAY[@]}
: 取出所有元素
- 说明:
offset
是偏移的元素个数,number
是取出的元素的个数
|
|
1.4 从数组中删除元素:
unset ARRAY[index]
2. 数组使用示例
示例 1
定义一个数组,数组中的元素是/var/log目录下所有以.log结尾的文件;统计其下标为偶数的文件中的行数之和;
|
|
示例 2
生成10个随机数,升序排序
|
|
2. 算术运算
bash 是弱类型编程语言,所有变量的默认类型是字符串。因此算术运算必需借助特定的命令来实现。同时 bash 中默认也不支持浮点数,当然也几乎用不到
常见的算术运算符包括 +,-,*,/, **, %
,bash中实现算术运算有如下几种方式:
let var=3+4
: let 不会打印输出,只能使用变量进行保存let count+=2
: let 支持增量赋值+=,-=,*=, /=, %=
let count++
: let 支持自增运算var=$[$var+1]
var=$(($var+1))
var=$(expr 3 \* 4)
: 运算符和操作数之间必须使用空格分割,*
需要转义$RANDOM
: bash 内置的随机数生成器,表示 1-32767 的随机数echo $[$RANDOM%60]
- 注意:乘法符号在有些场景中需要使用转义符;
|
|