标签:linux 数组
数组就是变量阵列,多个变量组合到一块,通过同一个名字进行存取操作。数值是连续的多个独立的内存空间(元素),每个内存空间相当于一个变量。数组元素通过“数组名[索引]”进行引用。索引也称为下标,从0而不是1开始编号。
声明数组:declare -a Array_Name
bash的数组支持稀疏格式,所谓的稀疏格式就是,一个数组中的只有两个元素,但这两个元素可以是第一个和第九个,中间的都为空。
(1) 一次只赋值一个元素
a_name[index]=value --> 数组名[索引]=值
例如:
weekday[0]="Sunday":数组weekday第1个元素为Sunday
weekday[1]="Monday":
(2) 一次赋值全部元素
weekday=("Sunday" "Monday" "Tuesday")
[root tmp]# weekdays=(Sun Mon Tue Wed)
[root tmp]# echo ${weekdays[0]}
Sun
[root tmp]# echo ${weekdays[1]}
Mon(3) 指定索引进行赋值,支持稀疏格式
weekdays=([0]="Sunday" [3]="Thu" [6]="Sat")
[root tmp]# weekdays=([6]=Sun [0]=Mon [1]=Tue)
[root tmp]# echo ${weekdays[2]}
[root tmp]# echo ${weekdays[1]}
Tue
[root tmp]# echo ${weekdays[6]}
Sun(4) read -a a_name,实现多个数据到数组中。
不使用-a会当成一个元素
[root tmp]# read hello
qw er t
[root tmp]# echo ${hello[1]}
[root tmp]# echo ${hello[0]}
qw er t使用-a就会通过空格区分
[root tmp]# read -a hello
qw er t
[root tmp]# echo ${hello[1]}
er
[root tmp]# echo ${hello[0]}
qw${array_name[index]},花括号是不可省略的。
获取数组长度(就是获取数组中有多少元素):${#array[*]}, ${#array[@]}
[root tmp]# echo ${#hello[*]}
3不带下标时,默认为第一个元素:
[root tmp]# echo $hello qw
因此,此为显示第一个元素中的字符个数:
[root tmp]# echo ${#hello}
2练习:写一个脚本,生成10个随机数,保存至数据组中,而后显示数组索引为偶数的元素的值。
#!/bin/bash
#
for ((i=0;i<10;i++)); do
rand[$i]=$RANDOM
echo ${rand[$i]}
done
echo "========================"
for i in `seq 0 2 9`; do
echo ${rand[$i]}
done练习:写一个脚本,定义一个数组,数组元素为/var/log目录下所有以.log结尾的文件的名字,显示每个文件的行数。
#!/bin/bash
#
declare -a files
files=(/var/log/*.log)
for i in `seq 0 $[${#files[*]}-1]`; do
wc -l ${files[$i]}
done从数组中挑选指定的某个或某些元素:${array[@]:offset:number}
offset:偏移的元素的个数。
number:要取出的元素的个数。
[root ~]# weekdays=(Sun Mon Tue Wed Thu Fri Sat)
[root ~]# echo ${weekdays[@]:2:2}
Tue Wed
[root ~]# echo ${weekdays[@]:3:2}
Wed Thu取出偏移量之后剩余所有的元素:${array[@]:offset}
[root ~]# echo ${weekdays[@]:3}
Wed Thu Fri Sat所有元素:${array[@]}
array_name[${#array_name[*]}]=value
稀疏格式这么添加可能会造成覆盖:
[root ~]# hello=([6]=qw [3]=er [4]=ty)
[root ~]# echo ${hello[@]}
er ty qw
[root ~]# hello[${#hello[*]}]=ui
[root ~]# echo ${hello[@]}
ui ty qw非稀疏格式完全没问题:
[root ~]# hello=(qw er ty ui)
[root ~]# hello[${#hello[*]}]=nm
[root ~]# echo ${hello[@]}
qw er ty ui nmunset array[index],撤销不是引用,一定不要加$。
[root ~]# weekdays=(Sun Mon Tue Wed Thu Fri Sat)
[root ~]# unset weekdays[3]
[root ~]# echo ${weekdays[@]}
Sun Mon Tue Thu Fri Satbash从4.0版本起支持关联数组,数组索引可为自定的字符串。也就是说数组的下标可以不再是数字了。
定义方法:declare -A array_name
[root ~]# declare -A wdays
[root ~]# wdays=([sun]=Sunday [mon]=Monday [tue]=Tuesday)
[root ~]# echo ${wdays[mon]}
Monday有了数组之后就可以定义比较复杂的算法了。
标签:linux 数组
原文地址:http://10042224.blog.51cto.com/10032224/1651033