数组


数组的介绍


平时的定义a=1,b=2,c=3;变量如果多了,再一个一个定义很费劲,并且取变量也很费劲。

简单说,数组就是相同数据类型的元素按一定顺序排序的集合

数组就是把有限的类型相同的变量用一个名字命名,然后用不同的编号区分他们的变量的集合,这个名字就是数组名,编号成为数组的下标,组成数组的各个变量成为数组的分量,也称为数组的元素。

由于有了数组,就可以用相同的名称引用一系列的变量,并用数组(索引)来识别他们,在许多场合,使用数组可以缩短和简化程序的开发,因为可以利用索引值设计一个循环,高效处理多种情况


数组的定义和增删改查

1、数组的定义

 方法1: array_name=(value0 value1 value2 value3)

 

 方法2:

array_name=(

value0

value1

value2

value3

)

 

 方法3:

array_name[0]=value0

array_name[1]=value1

array_name[2]=value2


2、获取数组的长度

[root@LAMP ~]# arr=(1 2 3 4)

[root@LAMP ~]# echo ${#arr[@]}

4

[root@LAMP ~]# echo ${#arr[*]} 

4

3、获取数组元素的值 

   ${array_name[@]} 所有元素的值

   ${array_name[*]} 所有元素的值

   ${array_name[i]}         单个元素的值,i是下标

   


[root@LAMP ~]# echo ${arr[0]}

1

[root@LAMP ~]# echo ${arr[1]} 

2

[root@LAMP ~]# echo ${arr[2]} 

3

[root@LAMP ~]# echo ${arr[3]} 

4

[root@LAMP ~]# echo ${arr[@]}

1 2 3 4

[root@LAMP ~]# echo ${arr[*]} 

1 2 3 4

[root@LAMP ~]# 

[root@LAMP ~]# for ((i=0;i<${#arr[*]};i++));do echo ${arr[$i]};done

1

2

3

4

[root@LAMP ~]# 


==============

逐一读出数组的值

for item in ${myarray[*]};

do

echo $item;

done;


[root@LAMP ~]# arr=(1 2 3 4)

[root@LAMP ~]#  for n in ${arr[@]} ;do  echo $n ;done  

1

2

3

4

[root@LAMP ~]#



4、数组增加元素,数组赋值都可以

###array_name[n]=value

 

[root@LAMP ~]# for n in `seq 0 1 3` ;do  echo ${arr[$n]} ;done      

1

2

3

4

[root@LAMP ~]# echo ${#arr[@]}                                  

4

[root@LAMP ~]# arr[4]=5

[root@LAMP ~]# echo ${#arr[@]}

5

[root@LAMP ~]# for n in `seq 0 1 4` ;do  echo ${arr[$n]} ;done 

1

2

3

4

5

 

 

5、数组删除

  删除数组的某个元素: unset array_name[n] 

                 或者: ${array_name[@或者*]#字符}   从左边开始匹配删除最短

                        ${array_name[@或者*]##字符}   从左边开始匹配删除最长

       ${array_name[@或者*]%字符}   从右边开始匹配删除最短

       ${array_name[@或者*]%%字符}   从右边开始匹配删除最长

  删除整个数组: unset array_name   


[root@LAMP ~]# echo ${arr[4]} 

5

[root@LAMP ~]# unset arr[4]        

[root@LAMP ~]# echo ${arr[4]}

[root@LAMP ~]#

############################

[root@LAMP ~]# unset arr

[root@LAMP ~]# echo ${arr[3]}

[root@LAMP ~]# echo ${#arr[@]}

0

[root@LAMP ~]#

6、数组的截取和替换(和变量子串的替换很像)


截取

[root@LAMP ~]# arr=(a b c d e f g)

[root@LAMP ~]# echo ${arr[@]:1:3}         ##${arr[@]:截取的开始:截取长度}

b c d

[root@LAMP ~]# echo ${arr[@]:3:2} 

d e

[root@LAMP ~]#


替换

[root@LAMP ~]# arr=(a b c d e f g)

[root@LAMP ~]# echo ${arr[@]/a/xiaogao}

xiaogao b c d e f g

[root@LAMP ~]# echo ${arr[0]}

a

[root@LAMP ~]#

调用方法: ${数组名[@或者*]/匹配的字符/替换的字符},改操作不会更改原理数组的内容,如果需要修改,那就需要重新定义