一文教你入门shell脚本4.0——Shell数组详解

Shell数组详解
一、Shell数组
1、定义
2、特征
3、使用
3.1、定义数组实例
3.2、获取数组元素
3.3、数组长度
3.4、数组拼接
3.5、数组删除
二、Shell关联数组
1、定义
2、使用
2.1、定义数组实例
2.2、获取数组元素以及所有元素的下标和值
2.3、数组长度
2.4、关联数组实例
参考
一、Shell数组
Shell 也支持数组。数组(Array)是若干数据的集合。

1、定义
定义数组的一般形式为:

array_name=(ele1 ele2 ele3 … elen)
1
用括号( )来表示数组,数组元素之间用空格来分隔
赋值号=两边不能有空格,必须紧挨着数组名和数组元素。
2、特征
1、Shell 并且没有限制数组的大小,理论上可以存放无限量的数据。
2、Shell 数组元素的下标也是从 0 开始计数。
3、Shell获取数组中的元素要使用下标[ ],下标可以是一个整数,也可以是一个结果为整数的表达式;当然,下标必须大于等于 0。
4、Bash Shell 只支持一维数组,不支持多维数组。
5、Shell 是弱类型的,它并不要求所有数组元素的类型必须相同。
3、使用
3.1、定义数组实例
nums=(29 100 13 8 91 44)

arr=(20 56 “helloworld”)
1
2
3
Shell 数组的长度不是固定的,定义之后还可以增加元素。例如,对于上面的 nums 数组,它的长度是 6,使用下面的代码会在最后增加一个元素,使其长度扩展到 7:

nums[6]=88
1
无需逐个元素地给数组赋值,下面的代码就是只给特定元素赋值:

ages=([3]=24 [5]=19 [10]=12)
1
只给第 3、5、10 个元素赋值,所以数组长度是 3。

3.2、获取数组元素
${array_name[index]}
1
array_name 是数组名,index 是下标。

n=${nums[2]}
1
表示获取 nums 数组的第二个元素,然后赋值给变量 n。

echo ${nums[3]}
1
输出 nums 数组的第 3 个元素。

${nums[]}
${nums[@]}
1
2
使用@或
可以获取数组中的所有元素

#!/bin/bash

nums=(29 100 13 8 91 44)
echo ${nums[@]} #输出所有数组元素
nums[10]=66 #给第10个元素赋值(此时会增加数组长度)
echo ${nums[*]} #输出所有数组元素
echo ${nums[4]} #输出第4个元素
1
2
3
4
5
6
7

3.3、数组长度
数组长度,就是数组元素的个数。使用#来获取数组元素的个数

${#array_name[@]}
${#array_name[*]}
1
2
如果某个元素是字符串,还可以通过指定下标的方式获得该元素的长度

${#arr[2]}
1
获取 arr 数组的第 2 个元素(假设它是字符串)的长度。
或者

${#string_name} #string_name 是字符串名。
1
实例

#!/bin/bash

nums=(29 100 13)
echo ${#nums[*]}

#向数组中添加元素
nums[10]=“helloworld”
echo ${#nums[@]}
echo ${#nums[10]}

#删除数组元素
unset nums[1]
echo ${#nums[]}
echo ${nums[
]}
1
2
3
4
5
6
7
8
9
10
11
12
13
14

3.4、数组拼接
array_new=(${array1[@]} a r r a y 2 [ @ ] ) a r r a y n e w = ( {array2[@]}) array_new=( array2[@])arraynew=({array1[]} ${array2[]})
1
2
利用@或*,将数组扩展成列表,然后再合并到一起。

两种方式是等价的,选择其一即可。其中,array1 和 array2 是需要拼接的数组,array_new 是拼接后形成的新数组。

#!/bin/bash

array1=(23 56)
array2=(99 “hello,KOBE”)
array_new=(${array1[@]} ${array2[*]})

echo ${array_new[@]} #也可以写作 ${array_new[*]}
1
2
3
4
5
6
7

3.5、数组删除
unset array_name[index]
1
unset 关键字来删除数组元素,array_name 表示数组名,index 表示数组下标。

#!/bin/bash

array1=(8 “hi,GiGi”)
array2=(24 “hello,KOBE”)
array_new=(${array1[@]} ${array2[*]})

echo ${array_new[*]}

unset array_new[0]
echo ${array_new[*]}
1
2
3
4
5
6
7
8
9
10

二、Shell关联数组
关联数组使用字符串作为下标,而不是整数,可以使用任意的文本作为数组索引。

1、定义
关联数组也称为“键值对(key-value)”数组,键(key)也即字符串形式的数组下标,值(value)也即元素值。

declare -A arr_name
1
关联数组必须使用带有-A选项的 declare 命令创建,arr_name为数组名

2、使用
2.1、定义数组实例
1、使用行内“索引-值”进行赋值

arr_name=([index1]=val1 [index2]=val2)
1
实例

declare -A Allstar=([“KOBE”]=“24”, [“GIGI”]=“2”, [“Lebron”]=“23”)
1
2、使用独立的”索引-值“进行赋值

arr_name[index1]=val1
arr_name[index2]=val2
1
2
实例

declare -A Allstar
Allstar[“KOBE”]=“24”
Allstar[“GIGI”]=“2”
Allstar[“Lebron”]=“23”
1
2
3
4
2.2、获取数组元素以及所有元素的下标和值
array_name[“index”]
1
加上$()即可获取数组元素的值:

$(array_name[“index”])
1
declare -A Allstar
Allstar[“KOBE”]=“24”
echo $(Allstar[“KOBE”])
1
2
3
获取所有元素的下标和值
使用下面的形式可以获得关联数组的所有元素值:

${array_name[@]}
${array_name[*]}
1
2
使用下面的形式可以获取关联数组的所有下标值

${!array_name[@]}
${!array_name[]}
1
2
2.3、数组长度
${#array_name[
]}
${#array_name[@]}
1
2
2.4、关联数组实例
#!/bin/bash

declare -A Allstar
Allstar[“KOBE”]=“24”
Allstar[“GIGI”]=“2”
Allstar[“Lebron”]=“23”

#获取所有元素值
for value in ${Allstar[]}
do
echo $value
done
echo "
**************"
#获取所有元素下标(键)
for key in ${!Allstar[
]}
do

echo $key

done
echo “****************”
#列出所有键值对
for key in ! A l l s t a r [ @ ] d o e c h o " {!Allstar[@]} do echo " !Allstar[@]doecho"{key} -> KaTeX parse error: Expected '}', got 'EOF' at end of input: {Allstar[key]}"
done
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
输出结果如下:

2
23
24


GIGI
Lebron
KOBE


GIGI -> 2
Lebron -> 23
KOBE -> 24
1
2
3
4
5
6
7
8
9
10
11

参考
1、http://c.biancheng.net/view/810.html
2、http://c.biancheng.net/view/3009.html
————————————————
版权声明:本文为CSDN博主「JMW1407」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/JMW1407/article/details/107457932

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值