0、字符串、列表、数组
"a b c d" 字符串
"a" "b" "c" "d" 列表
("a" "b" "c" "d") 数组
1、数组定义方法
列表输出方式
--------------------
列表名="10 20 40 60"
echo $列表名
--------------------
列表名=("a" "b" "c" "d") 如果值为字符类型,需要加双引号或单引号
echo ${列表名[*]}
1.1、小括号法
数组名=(value0 value1 value2)
echo ${数组名[*]}
echo ${数组名[@]}
--------------------------------
#直接输出下标
[root@localhost ~]# array1=(10 20 30 40 50)
[root@localhost ~]# echo ${array1[*]}
10 20 30 40 50
[root@localhost ~]# echo ${array1[@]}
10 20 30 40 50
--------------------------------
1.2、列表定义法
#将列表转换为下标
[root@localhost ~]# list1="10 20 30 40"
[root@localhost ~]# arry2=($list1)
[root@localhost ~]# echo ${arry2[@]}
10 20 30 40
1.3、下标定义法
[root@localhost ~]# array3=([0]=20 [1]=30 [3]=40 [4]=40)
[root@localhost ~]# echo ${array3[*]}
20 30 40 40
1.4、直接下标法
-----------------------------------------
[root@localhost ~]# arry4[0]=10
[root@localhost ~]# arry4[1]=20
[root@localhost ~]# arry4[3]=30
[root@localhost ~]# arry4[4]=40
[root@localhost ~]# echo ${arry4[*]}
10 20 30 40
2、获取数组长度
大括号前加# echo ${#array[*]} / echo ${#array[@]}
echo ${#array[*]}
echo ${#array[@]}
3、数组操作
3.1、增
添加数组值
array[下标]=值
---------------------------------------------------
[root@localhost ~]# array1=([0]=10 [1]=20 [3]=40)
[root@localhost ~]# echo ${array1[*]}
10 20 40
[root@localhost ~]# array1[2]=0 增加
[root@localhost ~]# echo ${array1[*]}
10 20 0 40
--------------------------------------------------
末尾追加数组值 array+=( )
--------------------------------------------------
[root@localhost ~]# array=(10 20 30 40 50)
[root@localhost ~]# array+=(70 80 90)
[root@localhost ~]# echo ${array[*]}
10 20 30 40 50 70 80 90
[root@localhost ~]#
----------------------------------------------------
array[${#array[*]}]=100 法二,追加数值100
但是少元素或删去元素,只会替换最后的数值
----------------------------------------------------
array=("${array[@]}" 500 600) 法三,这里必须用@,相对于"$@",都看作个体
[root@localhost ~]# array=(10 20 30 40 50)
#这里必须加" ",不然遇到li si会拆分成两个
[root@localhost ~]# array=("${array[@]}" 500 600)
[root@localhost ~]# echo ${array[*]}
10 20 30 40 50 500 600
[root@localhost ~]#
3.2、删
删除单个数
-------------------------------------
[root@localhost ~]# array=(10 20 30 40 50)
[root@localhost ~]# echo ${array[*]}
10 20 30 40 50
[root@localhost ~]# unset array[3]
[root@localhost ~]# echo ${array[3]}
[root@localhost ~]#
-------------------------------------
删除整个数组
--------------------------------------
[root@localhost ~]# unset array[*]
[root@localhost ~]# echo ${array[*]}
[root@localhost ~]#
3.3、改
字符替换,不考虑整个元素值,但是只是临时替换,不影响原来数组值
---------------------
[root@localhost ~]# array=(10 20 30 40 50)
[root@localhost ~]# echo ${array[@]/0/00}
100 200 300 400 500
[root@localhost ~]# echo ${array[@]} 不影响原来数组值
10 20 30 40 50
[root@localhost ~]#
----------------------
永久替换 给替换加括号,重新定义即可
----------------------
[root@localhost ~]# array2=(${array[@]/0/00})
[root@localhost ~]# echo ${array2[@]}
100 200 300 400 500
3.4、查
输出某一个值
-------------------------------
echo ${array[数字]}
-------------------------------
如果定义数组缺少数字,则单个无法获取
输出最后元素的值
-------------------------------
array=(10 20 30 40 50)
length=${#array[*]} 数组长度
last=$[length -1]
echo ${array[$last]}
--------------------------
echo ${array[-1]}
用法:
-
用于判断是否数组完整,如果最后元素不符合,说明含有空值
-
利于数组长度作为最后下标,也能判断
4、数组遍历
4.1、下标for循环法
#!/bin/bash
array=(10 20 30 40 50)
length=${#array[*]}
for((i=0;i<=length-1;i++))
do
echo ${array[$i]}
done
4.2、直接for循环法
#!/bin/bash
array=(10 20 30 40 50)
for i in ${array[*]}
do
echo $i
done
5、数组的分片
字符串分片 echo ${字符串: 起始 :长度}
echo ${array[*]:起始:长度}
---------------------------------------
[root@localhost ~]# array=(10 20 30 40 50)
[root@localhost ~]# echo ${array[*]:2:3}
30 40 50
6、数值传参
三步曲:
-
输入函数:利于函数参数,把数组转换为列表 函数名 ${array[@]}
-
函数内重组在函数把列表内重新合成数组 数组名2=($@)
-
输入函数:函数外重新组合成数组 数组名3=(
函数名 $数组名1[@]
)
利于$@收集全部数组值,利于${array[@]}将数组转换为列表
#!/bin/bash
myfun()
{
#2、利于$@收集使用参数,如果使用$1只能收集数组第一位数值
echo "函数接收到的参数为: $@"
newarry=($@)
echo "新数组的值为:${newarry[@]} "
############################# 数组元素*2,变成两倍
for((i=0;i<=$[$#-1];i++)) $#-1为长度
do
newarry[$i]=$[${array[$i]}*2] 元素变成两倍
done
echo ${newarry[@]} 输出数组结果
#############################
}
####main####
array=(3 1 4 2 6 5)
echo "原来数组的值为: ${array[@]}"
myfun ${array[@]} #1、利于${array[@]},将列表作为参数,这里也可以用*
###############
result=(`myfun ${array[*]}`) #3、将数组转换为列表 作为函数参数传给新变量result
echo "函数处理后的数组的值为:${result[@]}" 将新变量作为数组展开使用
7、数组累加求和
#!/bin/bash
test01()
{
#2、把函数内传入的列表重新组合成为数组
newarry=($@)
sum=0
for i in ${newarry[@]}
do
sum=$[sum+i]
done
echo "数组所有元素的累加和为:$sum"
}
####main####
array=(10 20 30 40 50 60)
#1、将数组转换为列表作为函数的参数使用 --》${array[@]}
test01 ${array[@]}