shell脚本进阶之数组基础
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了shell脚本进阶之数组基础相关的知识,希望对你有一定的参考价值。
SHELL脚本--shell数组基础? 数组和变量的区别:变量在内存中占用的空间是离散的,数组在内粗中开辟一段连续的大内存空间,随后数组中的每个元素都放入数组内存中。数组元素使用index标识。
? bash里有两种数组普通数组和关联数组。普通数组只能使用整数类形数值作为数组索引,关联数组可以使用字符串作为索引。关联数组的另外三种称呼:字典(dict),hash结构和映射(map),是一种key和value一一对应的关系。
一、普通数组
1.1定义普通数组
方法一:
[root@linux1 ~]# age=(18 22 36 28)
[root@linux1 ~]# echo $age[3]
28
方法二:自定义索引位
[root@linux1 ~]# age[5]=15
[root@linux1 ~]# age[6]=76
1.2打印数组所有值
[root@linux1 ~]# echo $age[*]
18 22 36 28 15 76
[root@linux1 ~]# echo $age[@]
18 22 36 28 15 76
1.3查看数组索引号
[root@linux1 ~]# echo $!age[@]
0 1 2 3 5 6
1.4统计数组中元素的个数(只统计值不为空的元素)
[root@linux1 ~]# echo $#age[@]
6
[root@linux1 ~]# echo $#age[*]
6
1.5统计数组下标为1的变量的长度
[root@linux1 ~]# echo $#age[1]
2
二、关联数组
2.1声明关联数组
[root@linux1 ~]# declare -A array_dep
2.2数组赋值
[root@linux1 ~]# array_dep=([name1]=zhaosi [name2]=zhangsan)
分开赋值
[root@linux1 ~]# array_dep[name3]=wangwu
[root@linux1 ~]# array_dep[name4]=wangba
2.3查看数组所有值
[root@linux1 ~]# echo $array_dep[*]
wangwu zhangsan zhaosi wangba
[root@linux1 ~]# echo $array_dep[@]
wangwu zhangsan zhaosi wangba
2.3查看数组索引号
[root@linux1 ~]# echo $!array_dep[@]
name3 name2 name1 name4
[root@linux1 ~]# echo $!array_dep[*]
name3 name2 name1 name4
2.4统计数组长度
[root@linux1 ~]# echo $#array_dep[*]
4
[root@linux1 ~]# echo $#array_dep[@]
4
三、数组元素截取、替换
和变量的截取和替换是类似的
[root@linux1 ~]# age=(12 15 34 23 56 21)
[root@linux1 ~]# age0=$age[*]:2:2 #从数组全部元素中第2个元素向后截取2个元素出来(即34 23)
[root@linux1 ~]# echo $age0[*]
34 23
[root@linux1 ~]# age1=$age[*]/15/51 #将数组中的15替换成51
[root@linux1 ~]# echo $age1[*]
12 51 34 23 56 21
从左匹配删除和从又匹配删除
[root@linux1 ~]# array=(one two three foue five)
[root@linux1 ~]# array1=$array[*]#*o #o前面的都删了,只留o右边(最短匹配)
[root@linux1 ~]# array2=$array[*]##*o #o前面的都删了,只留o右边(最长匹配)
[root@linux1 ~]# array3=$array[*]%o #o后面的都删了,只留o前面(最短匹配)
[root@linux1 ~]# array4=$array[*]%o #o后面的都删了,只留o前面(最长匹配)
[root@linux1 ~]# echo $array1[*]
ne three ue five
[root@linux1 ~]# echo $array2[*]
ne three ue five
[root@linux1 ~]# echo $array3[*]
one tw three foue five
[root@linux1 ~]# echo $array4[*]
one tw three foue five
四、for循环遍历数组
第一种写法:
for i in $array[*];do
echo $i
done
第二种写法:
for i in $!array[*];do
echo $array[$i]
done
第三种写法:c语言风格
for ((i=0;i<$#array[*];i++));do # 以数组变量个数的方式遍历数组
echo $array[$i]
done
以上是关于shell脚本进阶之数组基础的主要内容,如果未能解决你的问题,请参考以下文章