shell脚本之数组

 内容预知

 1.数组的基本概念和相关知识

2. Linux中数组的构造

2.1 数组默认规则

2.2 字符串和字符列表的定义 

2.3数组定义构造的方法 

2.3.1 定义方式1 

2.3.2 定义方式2 

2.3.3 定义方式3

2.3.4 定义方式4(该方法还可以用于单个元素的修改)

3. 数组的输出,删除和长度统计

3.1 数组元素的输出 

3.1.1 单元素的输出 

3.1.2 数组全部元素输出 

3.1.3 任意字符起输出任意个数数组元素 (数组切片)

 3.1.4 条件判断输出方式

3.2 数组的删除 (Linux命令环境中)

 3.2.1 删除单个数组元素

3.2.2 删除整个数组

3.3 数组长度统计及其其他作用 

3.3.1 统计数组长度的方法

3.3.2 用元素个数的方法来检测数组中是否存在空值 

4.数组的遍历和替换 

 4.1 数组的遍历

4.2 数组中元素的替换 

 

4.2.1 数组的临时替换 

4.2.2 永久替换数组内容

 5.数组追加元素

 5.1 方式一:指定位置添加

5.2 方式二: 末尾追加元素

5.3  方式三:进行末尾多元素追加

方法四:直接末尾追加多元素且格式最为简单 

6.数组在函数的传参

 总结


 

 1.数组的基本概念和相关知识

 

 数组(Array)是有序的元素序列。 若将有限个类型相同的变量的集合命名,那么这个名称为数组名。组成数组的各个变量称为数组的分量,也称为数组的元素,有时也称为下标变量。用于区分数组的各个元素的数字编号称为下标。数组是在编程中,为了处理方便, 把具有相同类型的若干元素按有序的形式组织起来的一种形式。  这些有序排列的同类数据元素的集合称为数组。

2. Linux中数组的构造

2.1 数组默认规则

  • 数组中的每个元素分分隔符一定为空格隔开
  • 每个元素都拥有与其对应的下标,第一个对应的下标值为0 

 

2.2 字符串和字符列表的定义 

 在数组之前我们定义一串字符的变量,用到的是字符串和字符串列表

 

字符串的定义格式: 变量名= 字符数据 

 

字符串列表的定义格式:  变量名="字符   分隔符  字符............." 

 

2.3数组定义构造的方法 

 

常用的数组定义方法一共拥有4种,各有不同的特点与运用场景

 

2.3.1 定义方式1 

数组名=(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

2.3.2 定义方式2 

 

数组名=( [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

 

2.3.3 定义方式3

 

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

2.3.4 定义方式4(该方法还可以用于单个元素的修改)

 数组名[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. 数组的输出,删除和长度统计

3.1 数组元素的输出 

 

3.1.1 单元素的输出 

格式:echo ${数组名[下标]} 

[root@localhost shuzhu]# echo ${array1[0]}
10
[root@localhost shuzhu]# echo ${array1[3]}
40
[root@localhost shuzhu]# echo ${array1[2]}
30

 

3.1.2 数组全部元素输出 

 

 方式一:echo ${数组名[*]}

方式二:echo  ${数组名[@]}

[root@localhost shuzhu]# echo ${array1[*]}
10 20 30 40 50
[root@localhost shuzhu]# echo ${array1[@]}
10 20 30 40 50

 

3.1.3 任意字符起输出任意个数数组元素 (数组切片)

 方式一:echo ${数组名[*]:下标:个数}

 方式一:echo ${数组名[@]:下标:个数}

[root@localhost shuzhu]# echo ${array1[@]:2:3}
30 40 50

 

 3.1.4 条件判断输出方式

 该输出方式,当数组存在元素,则输出数组的,如果不存在,则输出我们指定的内容

格式:echo ${数组名:-'选择输出的内容'}

 

 

 

3.2 数组的删除 (Linux命令环境中)

 3.2.1 删除单个数组元素

格式: 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

 

3.2.2 删除整个数组

 格式:  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]# 

 

 

3.3 数组长度统计及其其他作用 

3.3.1 统计数组长度的方法

格式:echo ${#数组名[*]}或则 echo ${#数组名[@]}

 

[root@localhost shuzhu]# echo ${#array2[*]}
10
[root@localhost shuzhu]# echo ${#array2[@]}
10
[root@localhost shuzhu]# 

3.3.2 用元素个数的方法来检测数组中是否存在空值 

 数组空值产生的原因:

我们用方法四定义数组元素值时,可以随意指定下标位置,但与此同时中间的有些数组下标中的元素就成了空值 。

操作过程: 

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.数组的遍历和替换 

 4.1 数组的遍历

 

我们可以用数组存储多个元素作为循环条件来使用,当数组配上循环,就可以形成一个指定范围和数据的遍历

数组遍历演示: 

[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

 

4.2 数组中元素的替换 

 

4.2.1 数组的临时替换 

格式: 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]# 

4.2.2 永久替换数组内容

原理描述: 用一个新的数组去接收临时替换的数组的元素(达到永久替换的效果)

 运用演示:

[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.数组追加元素

 

 5.1 方式一:指定位置添加

 与定义数组方法4一样,直接赋予新值覆盖原来的元素

数组名[N]=新value

 

5.2 方式二: 末尾追加元素

 

格式: 数组名[${#数组名[*]}] =新元素   或     数组名[${#数组名[@]}] =新元素


[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

 

 

5.3  方式三:进行末尾多元素追加

格式:数组名=("${数组名[@]}"  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.函数获取数组,函数的位置变量使用$@或则@*才可获取完整的数组参数

  • 4
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值