内容预知
1.数组的基本概念和相关知识
数组(Array)是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在编程中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。 这些有序排列的同类数据元素的集合称为数组。
2. Linux中数组的构造
在数组之前我们定义一串字符的变量,用到的是字符串和字符串列表
字符串的定义格式: 变量名= 字符数据

字符串列表的定义格式: 变量名="字符 分隔符 字符............."
常用的数组定义方法一共拥有4种,各有不同的特点与运用场景
数组名=(value0 value1 value2 ..........valuen)
- [root@localhost shuzhu]# array1=(10 20 30 40 50)
- [root@localhost shuzhu]# echo ${array1[@]}
- 10 20 30 40 50
- [root@localhost shuzhu]# echo ${array1}
- 10

数组名=( [0]=value1 [1]=value2 [2]=value3.........[N-1]=valueN )
- [root@localhost shuzhu]# array2=([0]=11 [1]=22 [3]=33 [4]=44)
- [root@localhost shuzhu]# echo ${array2[*]}
- 11 22 33 44

1.定义一个字符串列表 :列表名="value1 value2 value3...........valueN"
2.用数组获取字符串列表中的内容: 数组名=($列表名)
- [root@localhost shuzhu]# i="a b c d e f g"
- [root@localhost shuzhu]# array3=($i)
- [root@localhost shuzhu]# echo ${array3[*]}
- a b c d e f g

数组名[0]=value1
数组名[1]=value2
数组名[2]=value3
数组名[3]=value4
............................
数组名[N-1]=valueN
- [root@localhost shuzhu]# array4[0]=one
- [root@localhost shuzhu]# array4[1]=two
- [root@localhost shuzhu]# array4[2]=three
- [root@localhost shuzhu]# array4[3]=four
- [root@localhost shuzhu]# array4[4]=five
- [root@localhost shuzhu]# echo ${array4[*]}
- one two three four five

3. 数组的输出,删除和长度统计
格式:echo ${数组名[下标]}
- [root@localhost shuzhu]# echo ${array1[0]}
- 10
- [root@localhost shuzhu]# echo ${array1[3]}
- 40
- [root@localhost shuzhu]# echo ${array1[2]}
- 30

方式一:echo ${数组名[*]}
方式二:echo ${数组名[@]}
- [root@localhost shuzhu]# echo ${array1[*]}
- 10 20 30 40 50
- [root@localhost shuzhu]# echo ${array1[@]}
- 10 20 30 40 50

方式一:echo ${数组名[*]:下标:个数}
方式一:echo ${数组名[@]:下标:个数}
- [root@localhost shuzhu]# echo ${array1[@]:2:3}
- 30 40 50
该输出方式,当数组存在元素,则输出数组的,如果不存在,则输出我们指定的内容
格式:echo ${数组名:-'选择输出的内容'}

格式: unset 数组名[N] 其中N为存在元素的数组下标(不存在也能操作,但是没有意义)
- [root@localhost shuzhu]# echo ${array2[*]}
- 11 12 13 14 15 16 17 18 19 20
- [root@localhost shuzhu]# unset array2[3]
- [root@localhost shuzhu]# echo ${array2[*]}
- 11 12 13 15 16 17 18 19 20

格式: unset 数组名[*] 或则 unset 数组名[@]
- [root@localhost shuzhu]# echo ${array2[*]}
- 11 12 13 15 16 17 18 19 20
- [root@localhost shuzhu]# unset array2[*]
- [root@localhost shuzhu]# echo ${array2[*]}
-
- [root@localhost shuzhu]#

格式:echo ${#数组名[*]}或则 echo ${#数组名[@]}
- [root@localhost shuzhu]# echo ${#array2[*]}
- 10
- [root@localhost shuzhu]# echo ${#array2[@]}
- 10
- [root@localhost shuzhu]#

数组空值产生的原因:
我们用方法四定义数组元素值时,可以随意指定下标位置,但与此同时中间的有些数组下标中的元素就成了空值 。
操作过程:
1.定义一个变量获取数组的长度:新变量= ${#数组名[*]}
2.输出依据数组长度的最后一个元素:echo ${数组名[lenth-1]]
3.与数据列表最后一个值进行比较
- [root@localhost shuzhu]# arr1[0]=111
- [root@localhost shuzhu]# arr1[2]=112
- [root@localhost shuzhu]# arr1[3]=113
- [root@localhost shuzhu]# arr1[4]=114
- [root@localhost shuzhu]# lenth=${#arr1[*]}
- [root@localhost shuzhu]# echo ${arr1[lenth-1]}
- 113
- [root@localhost shuzhu]# echo ${arr1[*]}
- 111 112 113 114

4.数组的遍历和替换
我们可以用数组存储多个元素作为循环条件来使用,当数组配上循环,就可以形成一个指定范围和数据的遍历
数组遍历演示:
- [root@localhost shuzhu]# arry=(1 2 3 4 5 6 7 8 9 10)
- [root@localhost shuzhu]# for i in ${arry[*]}
- > do
- > echo $i
- > done
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10

格式: echo ${数组名[*]/被替换的字符或字段/新的字符或字段}
- [root@localhost shuzhu]# arry=(100 200 300 400 500 600 700)
- [root@localhost shuzhu]# echo ${arry[*]/00/22}
- 122 222 322 422 522 622 722
- [root@localhost shuzhu]# echo ${arry[*]/2/3}
- 100 300 300 400 500 600 700
- [root@localhost shuzhu]# echo ${arry[*]/300/200}
- 100 200 200 400 500 600 700
- [root@localhost shuzhu]# echo ${arry[*]}
- 100 200 300 400 500 600 700
- [root@localhost shuzhu]#

原理描述: 用一个新的数组去接收临时替换的数组的元素(达到永久替换的效果)
运用演示:
- [root@localhost shuzhu]# arry=(100 200 300 400 500 600 700)
- [root@localhost shuzhu]# echo ${arry[*]}
- 100 200 300 400 500 600 700
- [root@localhost shuzhu]# arry1=${arry[*]/300/200}
- [root@localhost shuzhu]# echo ${arry1[*]}
- 100 200 200 400 500 600 700

5.数组追加元素
与定义数组方法4一样,直接赋予新值覆盖原来的元素
数组名[N]=新value
格式: 数组名[${#数组名[*]}] =新元素 或 数组名[${#数组名[@]}] =新元素
-
- [root@localhost shuzhu]# echo ${arry[*]}
- 100 200 300 400 500 600 700
- [root@localhost shuzhu]# arry[${#arry[*]}]=800
- [root@localhost shuzhu]# echo ${arry[*]}
- 100 200 300 400 500 600 700 800

格式:数组名=("${数组名[@]}" value1 value2 ......valueN)
运用演示:
- [root@localhost shuzhu]# arry=(100 200 300 400 500 600 700)
- [root@localhost shuzhu]# echo ${arry[@]}
- 100 200 300 400 500 600 700
- [root@localhost shuzhu]# arry=("${arry[@]}" 800 900 1000)
- [root@localhost shuzhu]# echo ${arry[@]}
- 100 200 300 400 500 600 700 800 900 1000
格式: 数组名+=(value1 value2 ........valueN)
-
- [root@localhost shuzhu]# arry=(100 200 300 400 500 600 700)
- [root@localhost shuzhu]# echo ${arry[@]}
- 100 200 300 400 500 600 700
- [root@localhost shuzhu]# arry+=(800 900 1000)
- [root@localhost shuzhu]# echo ${arry[@]}
- 100 200 300 400 500 600 700 800 900 1000
6.数组在函数的传参
需求:定义一个遍历数组的函数,并且让数组里的元素翻倍输出
- #!/bin/bash
- a=0
- double (){
- local array=$@
- for i in ${array[@]}
- do
- let i*=2
- array[$a]=$i
- let a++
- done
- echo ${array[@]}
- }
-
-
- ##########main#########
- array=(10 20 30 40 50)
- RESULT=$(double ${array[@]})
- echo "翻倍后的数组为" $RESULT

结果测试 :

总结
1.数组的构造方法(我们可以看作是一个集合变量,包含许多独立的元素)
2.学会数组替换,并且用新数组接收,就可以形成永久替换的效果
3.追加数组的第三种方法要注意" "还有表示数组全部用@不用*
4.函数获取数组,函数的位置变量使用$@或则@*才可获取完整的数组参数