一、简介
数组是指将具有相同的数据类型的元素按照一定的顺序排列而成的集合,将类型相同的变量用一个名字命名,然后用索引编号区分它们,这个集合就叫做数组,其索引编号称为数组的下标。
二、数组的声明
shell编程中常见的数组格式为:array_name [index]
,其索引下标index从0开始编号,此类数组被称为索引数组,其声明方式为:declare -a array_name
另一种常见的数组为关联数组,在bash-4之后的版本中,数组支持自定义索引的格式,即可以使用字符串替代传统的数字作为index索引,此类数组被称之为关联数组,其数组格式为:array_name[string]
,声明方式为:declare -A array_name
。
三、数组的赋值与引用
在shell编程中支持以下几种数组的赋值方式:
- 1、一次只赋值一个元素,其格式类似于:ARRAY_NAME[INDEX]=VALUE
- 2、批量赋值,其格式类似于:ARRAY_NAME=("VAR1" "VAR2" "VAR3"....)
- 3、只给特定的值赋值,如:ARRAY_NAME=([0]="VAR1" [3]="VAR8" [7]="VAR3"....)
- 4、通过read命令输入数组的值,如下例子:
[root@localhost tmp]# read -a a
1 2 3 4 5 6 7 8 hello,world
[root@localhost tmp]# echo ${a[*]}
1 2 3 4 5 6 7 8 hello,world
如果想要取消一个数组的赋值,可以利用unset命令取消赋值,如:unset array_name[index]
。
数组的引用方式类似于:${array_name[index]}
,此表示为引用数组中的下标为index的元素,如果没有指定index,值给定数组名,则表示引用下标为0的元素。
除此之外,数组还有其他几种特殊的引用方式,如:
${array_name[*]} 或 ${array_name[@]} 表示引用数组中的所有元素;
${#array_name[*]} 或 ${#array_name[@]} 表示数组中的元素个数;
${#ARRAY[#]}:第#个元素的字符长度;
四、使用案例
- 利用数组对文件进行批量处理
#!/bin/bash
declare -a files
files=(/tmp/*)
for i in ${files[*]};do
ls -lh $i | awk '{printf "Files %s owner is %s.\n",$9,$3}'
done
[root@localhost tmp]# ./array.sh
Files /tmp/anacron owner is root.
Files /tmp/anacron.sh owner is root.
Files /tmp/array.sh owner is root.
Files /tmp/trap.sh owner is root.
Files /tmp/yum.log owner is root.
- 利用数组比较数值大小:
#!/bin/bash
declare -a rand
declare -i max=0
for i in {0..9};do
rand[$i]=$RANDOM
echo ${rand[$i]}
[ ${rand[$i]} -gt $max ] && max=${rand[$i]}
done
echo "MAX:$max"
[root@localhost tmp]# ./random.sh
11391
308
3797
23745
4749
30750
14709
14244
28703
4955
MAX:30750
网友评论