前言
近期在处理一个临时数据需求时,由于会用到埋点表的近一年的分区,一次性全量查询会产生18W+的mapper数,效率慢不说,而且影响集群的性能,故而采用shell的循环方式,把需要使用到的分区值放到一个数组,然后遍历数组中的每一个值,将查询的结果保存至一张分区表。本文先讲shell中的相关数组操作,For循环会放在下一篇。
定义数组
bash支持一维数组(不支持多维数组),并且没有限制数组的大小。数组的下标从0开始,下标可以是整数或者算数表达式,其值应大于或等于0.
在Shell中,用括号来表示数组,数组元素用“空格”符号分隔。定义数组的一般形式如下:
array=(v1 v2 v3 ...... vn)
还可以单独定义数组的各个分量:
array[0]=v0
array[1]=v1
array[n]=vn
可以使用不连续的下标,且下标的范围没有限制
读取数组
读取数组元素值的一般格式是,使用@或者*可以获取数组中的所有元素:
${array[index]}
${array[*]}
${array[@]}
例如:
#!/bin/bash
array[0]="I have "
array[1]="a happy "
array[2]="family"
echo ${array[0]}
echo ${array[1]}
echo ${array[*]}
获取数组的长度
获取数组长度及数组单个元素长度的方法如下:
#数组的长度
${#array[@]}
${#array[*]}
#获取单个元素的长度
${#array[index]}