目录
- 一、数组的定义方法
- 1、定义数组
- 1.1、使用shell脚本来写出怎么查看这个数组有没有缺少元素
- 1.2、使用shell脚本,来生成数组
- 1.3、元素的切片
- 二、数组追加元素
- 三、传输和传出
- 1、向函数传入数组的值
- 2、从函数返回数组
一、数组的定义方法
( 20 10 60 50 70 ) #以空格相间隔的数组
0 1 2 3 4 #下标
1、定义数组
方法一:
数组名=( 元素1 元素2 元素3 ...)
方法二:
数组名=([0]=值1 [1]=值2 [2]=值3 ...)
#每个元素的下标所对应的值
方法三:
列表名=“ 值1 值2 值3 ...”
数组名=($列表名)
方法四:
数组名[0]="值1"
数组名[1]="值2"
数组名[2]="值3"
数组名[3]="值4"
数组包括的数据类型
数值类型
字符串类型: 使用字符类型时要使用 “ ” 或者 ’ ’来定义
1、获取数组的所有元素的列表
$(数组名[*]) 或者 $(数组名[@])
2、获取数组的所有元素下标
${!数组名[@]} ${!数组名[*]}
3、统计数组的元素的长度和个数
${#数组名[*]}
${#数组名[@]}
4、获取数组的某个元素的值
${数组名[下标]}
5、删除数组某个元素
unset 数组[下标]
6、删除数组
unset 数组
7、数组切片,获取从数组的某个下标开始的多少个元素
${数组[@]:下标:长度}
8、数组字符替换
${数组[@]/旧字符/新字符}
怎么查看数组里有没有缺少元素值:
就使用总元素数量减去1,用减1的数值来查看是不是与最后一个元素值一样,一样就是没有缺少元素值,反之不一样就是缺少元素值
1.1、使用shell脚本来写出怎么查看这个数组有没有缺少元素
#!/bin/bash
#定义数组名和数组里面的值,来查看有没有缺少元素
array3=([0]=30 [1]=20 [2]=10 [3]=40 [5]=50 [4]=60)
length=${#array3[@]}
lastnum=$[length - 1]
lastone=${array3[$lastnum]}
curlast=$(echo ${array3[@]} | awk '{print $NF}')
#print $NF 显示最后一个字段
echo "array3数值的数为: ${array3[@]}"
if [ $lastone -eq $curlast ]
then
echo "array3数组是完整的"
else
echo "array3数组是缺少元素的"
fi
1.2、使用shell脚本,来生成数组
#!/bin/bash
a=0
for i in 10 20 30 40 50 #指定数组里,每个的值
do
array5[$a]=$i
let a++
done
echo ${array5[@]}
算出元素的总和值
1.3、元素的切片
[root@dz666 ~]# echo ${array4[@]}
11 22 33 44 55
[root@dz666 ~]# echo ${array4[@]:1:3}
#先跟上数组的列表的表达式:初始元素的下标:获取的长度
22 33 44
替换元素值
[root@dz666 ~]# echo ${array4[@]}
11 22 33 44 55
[root@dz666 ~]# echo ${array4[@]/33/88}
11 22 88 44 55
[root@dz666 ~]# echo ${array1[@]}
10 30 40 50
[root@dz666 ~]# echo ${array1[@]/0/8}
#匹配到的字符串全都替换掉
18 38 48 58
实现永久替换
重新赋值
[root@dz666 ~]# echo ${array1[@]}
10 30 40 50
[root@dz666 ~]# array1=(${array1[@]/10/60})
在数组外加上一个括号来进行替换
[root@dz666 ~]# echo ${array1[@]}
60 30 40 50
unset 来删除组和
[root@dz666 ~]# echo ${!array1[@]}
0 1 2 3
[root@dz666 ~]# unset array1[3]
#删除数组某个元素
[root@dz666 ~]# echo ${!array1[@]}
0 1 2
[root@dz666 ~]# unset array1
#删除数组
[root@dz666 ~]# echo ${!array1[@]}
[root@dz666 ~]#
二、数组追加元素
方法一:
[root@dz666 ~]# echo ${array4[@]}
11 22 33 44 55
[root@dz666 ~]# array4[5]=66
[root@dz666 ~]# echo ${array4[@]}
11 22 33 44 55 66
方法二:
[root@dz666 ~]# array4[${#array4[@]}]=77
#根据数组的长度来判断,只针对完整的数组来执行
[root@dz666 ~]# echo ${array4[@]}
11 22 33 44 55 66 77
方法三:
#双引号不能省略,否则,当数组array name中存在包含空格的元素时会按空格将元素拆分成多个
不能将"@"替换为"*",如果替换为"*",不加双引号时与"@"的表现一致,加双引号时,会将数组array中的所有元素作为一个元素添加到数组中
[root@dz666 ~]# array2=('zhang san' 'li si' 'wang wu' 'wo long' )
[root@dz666 ~]# echo ${array2[@]}
zhang san li si wang wu wo long
[root@dz666 ~]# echo ${#array2[@]}
4
[root@dz666 ~]# arr2=(${array2[@]})
[root@dz666 ~]# echo ${arr2[@]}
zhang san li si wang wu wo long
[root@dz666 ~]# echo ${#arr2[@]}
8
#不加上引号的话就会将一个空格为一个值,拆分为多个元素
[root@dz666 ~]# arr2=("${array2[*]}")
#如果这里面写如星号时,下面的数组就会作为一个整体
[root@dz666 ~]# echo ${arr2[@]}
zhang san li si wang wu wo long
[root@dz666 ~]# echo ${#arr2[@]}
1
#使用@时就会显示全部的元素值
[root@dz666 ~]# arr2=("${array2[@]}")
[root@dz666 ~]# echo ${arr2[@]}
zhang san li si wang wu wo long
[root@dz666 ~]# echo ${#arr2[@]}
4
#直接在后面加上要加的元素值
[root@dz666 ~]# arr2=("${array2[@]}" "fengchu" "nb" "haohen")
[root@dz666 ~]# echo ${arr2[@]}
zhang san li si wang wu wo long fengchu nb haohen
[root@dz666 ~]# echo ${#arr2[@]}
7
[root@dz666 ~]#
方法四:
[root@dz666 ~]# echo ${array2[@]}
zhang san li si wang wu wo long
[root@dz666 ~]# echo ${#array2[@]}
4
#使用 数组+= 直接在后面添加元素
[root@dz666 ~]# array2+=("nitaihenl" "taibangl")
[root@dz666 ~]# echo ${array2[@]}
zhang san li si wang wu wo long nitaihenl taibangl
[root@dz666 ~]# echo ${#array2[@]}
6
三、传输和传出
1、向函数传入数组的值
如果将数组变量作为函数参数,函数只会取数组变量的第一个值
#!/bin/bash
test1() {
#函数内通过$@能获取到调用函数时后面跟的所有参数,加上()可在函数内组成新的数组
newarr=($@)
#对函数内组成的新数组处理后,按照元素列表格式输出,在函数题外调用函数的表达式外加上()再组成新的数组
echo "函数内的数组的元素列表为: ${newarr[@]}"
}
###main###
#调用函数时后面跟的参数为数组的元素列表表达式
arr=(10 20 30 40 50 )
echo "函数外的数组的元素列表为: " ${arr[@]}
test1 ${arr[@]}
2、从函数返回数组
#!/bin/bash
#定义函数
array() {
#将调用函数后的所有参数定义为newarr
newarr=($@)
#下标i的范围从0开始,小于参数的个数。下标最大为数组参数个数减1
for ((i=0;i<${#newarr[@]};i++))
do
newarr[$i]=$[${newarr[$i]} * 2]
#将原有数组的值乘2
done
#将处理过的值进行输出
echo ${newarr[@]}
}
###main###
read -p "输入一个数组:" num
#将调用函数后输出的值定义为一个新数组arr,设置新的数组时要在数组外加上括号成为新数组
arr=($(array $num))
echo "新数组的值为${arr[@]}"