bash编程之 数组

数组:连续的多个独立内存空间,每个内存空间相当于一个变量

数组元素:数组名+索引

索引:从0开始编号

声明普通数组:以数字为索引值

declare -a ARRAR_NAME

支持稀疏格式:索引值可以不连续

例如:

# declare -a t1

# t1[0]="sss"

# echo ${t1[0]}

# t1[3]="eee"

# echo ${t1[3]}

声明关联数组:以字符串为索引值

declare -A ARRAY_NAME

例如:

# declare -A t2

# t2[peter]="zhou"

# echo ${t2[peter]}

数组元素的赋值:

(1) 一次只赋值一个元素

ARRAY[index]=VALUE

a[0]="hello"

(2) 一次赋值全部元素

ARRAY=("mon" "tue" "wed")

(3) 指定索引进行赋值

ARRAY=([0]="sun" [1]="mon" [5]="fri")

(4) read -a ARRAY

引用数组元素:${ARRAY[index]} 

数组的长度:

${#ARRAY[*]}, ${#ARRAY[@]}

练习1:写一个脚本,生成10个随机数,保存至数组rand中;而后显示数组索引为偶数的元素的值;

rand[$i]=$RANDOM

		#!/bin/bash
		#
		for i in {0..9}; do
			rand[$i]=$RANDOM
			[ $[$i%2] -eq 0 ] && echo "$i:${rand[$i]}"
		done

练习:写一个脚本:

定义一个数组,数组元素为/var/log目录下,所有以.log结尾的文件的名字;

而后显示其索引为奇数的元素的内容;

declare -a files

files=(/var/log/*.log)

		#!/bin/bash
		#
		declare -a files
		files=(/var/log/*.log)

		for i in `seq 0 $[${#files[*]}-1]`; do
			[ $[$i%2] -ne 0 ] && echo "$i: ${files[$i]}"
		done   

从数组中挑选某元素:

切片:

${ARRAY[@]:offset:number}

offset: 偏移过去的元素的个数;

number: 取出的元素的个数;

对于:week=(mon tue wed thu fri sat sun)

${week[@]:3:2}结果为:

 

${ARRAY[@]:offset}

取出指定偏移量之后的所有元素;

 

${ARRAY[@]}, ${ARRAY[*]}

取出所有元素;

向数组中追加元素:非稀疏格式

week[${#week[@]}] 

在数组末尾追加一个元素,比如:week[${#week[@]}]="aa", 相当于java中 week[week.length]="aa"

从数组中删除元素:

unset ARRAY[index]  

使用后下标为index的值不存在,后面的index不前移,${#ARRAY[@]的值会减1

关联数组:

可自定义任意字符串当作索引

declare -A week

week=([mon]="Monday" [tue]="Tuesday")

练习:生成10个随机数;排序;

猜你喜欢

转载自oracle-api.iteye.com/blog/2365429