1.比较
字符串 1234567890
字符串列表 " 10 20 30 40 50 60"
数组 {10 20 30 40 50 60} 每个数为元素中间以空格隔开
数组 {10 20 30 40 50 60}
0 1 2 3 4 5 代表下标
2. 定义数组
array1=(10 20 30 40 50) 代表定义了一个名为array1的数组
array1=('zhang san' 'li si' ' wangwu' 'zhaoliu')用单引号双引号都可以
3.查看某一元素的下标
echo ${array[n] // n代表查看的下标
4.获取数组的长度
echo ${#array[@]}
echo ${#array[*]}
5. 查看数组内最后一个元素的值
6.数组分片(数组截取)
${数组名[@]:起始位置:截取长度} //起始位置从0算起
${数组名[@]} //获取整个数组的元素值
${数组名[@]:0:3} //从下标为0的元素开始截取,共截取3个元素。(即截取元素1到元素3)
${数组名[@]:2:2} //从下标为2的元素开始截取,共截取2个元素。(即截取元素3到元素4)
7. 数组元素替换
1. 临时替换(不会影响原有数组)
#!/bin/bash
#定义数组
array=(10 20 30 40 50)
临时修改数组
echo ${array[@]/原有元素/新元素}
2.永久替换(重新赋值)
arrays2=(10 10 20 20) //定义值
arrays2= (${arrays2[@]/20/30}) //赋值
echo ${arrays2[@]} //输出
8. 删除数组
1.删除数组中的某个元素
9.数组扩写,增加数组内的元素
当我们原本定义的数组不能满足我们的需求时,我们需要追加数组内的元素。
第一种方法:
第二种方法:
第三种方法:
数组名[长度]=元素值
第四种方法:
数组名=("${数组名[@]}" 元素1 元素2 .....) //引用数组值必须加双引号,不然原数组内有空格的单个元素(例如"zhang san")会被当成2个元素。 //且必须使用@,因为加上双引号之后"$@"表示将所有参数当作个体,而$*表示将所有参数当作一个整体。
示例
[root@yuji ~]# b=(1 2 3)
[root@yuji ~]# echo ${b[@]}
1 2 3
[root@yuji ~]# b=("${b[@]}" 7 8) //引用数组的所有元素值一定要使用$@,因为加上双引号之
后"$@"表示将所有参数当作个体
[root@yuji ~]# echo ${b[@]}
1 2 3 7 8
[root@yuji ~]# echo ${#b[@]} //数组长度为5
5
[root@yuji ~]# b=("${b[*]}" 9) //如果使用$*,那么数组内的所有元素会被当作一个整体,即
被当成一个元素
[root@yuji ~]# echo ${b[@]}
1 2 3 7 8 9
[root@yuji ~]# echo ${#b[@]} //数组长度为2
2
#示例2
[root@yuji ~]# e=("li si") //当元素类型为字符时,一定要加引号,避免单个元素中有空
格被当成2个元素
[root@yuji ~]# echo ${e[@]}
li si
[root@yuji ~]# echo ${#e[@]}
1
[root@yuji ~]# e=("${e[@]}" "wang wu" "zhao liu") //引用数组的元素值时一定要使用双引
号,因为单引号无法引用变量值
[root@yuji ~]# echo ${e[@]}
li si wang wu zhao liu
[root@yuji ~]# echo ${#e[@]}
3
10. 使用for遍历输出数组的每个元素值
1.通过数组内元素遍历
2. 通过下标来遍历
###通过下标值来遍历这种方法可能由于数组内元素不完整某个下标对应函数值为空
[root@yuji ~]# echo ${arr[@]}
30 20 40 10 50
[root@yuji ~]# length=${#arr[@]}
[root@yuji ~]# for ((i=0;i<=length-1;i++))
> do
> echo ${arr[$i]}
> done
30
20
40
10
50
11.将数组的值传给函数
操作步骤:
第一步:向函数传入数组的时候需要先把数组转换成列表作为函数的参数使用: 函数名 ${数组名1[@]}
第二步:在函数内把传入的列表重新组合成数组: 数组名2=($@)
第三步:在函数外重新组合成数组: 数组名3=(`函数名 ${数组名1[@]}`
示例
使用for循环,令新数组内的每个元素值乘2