定义数组的方法
Shell中,数组用括号来表示,元素用"空格"符号分隔开。
数组包括的数据类型:
- 数值型
- 字符型 (如果元素值为字符类型,需要加单引号或双引号,防止单个元素中有空格被当成2个元素)
- 混合型数值加字符
定义数组格式:
-
数组名=(value0 value1 value2 value3 ......)
-
数组名=([0]=value [1]=value1 [2]=value2 ....)
-
列表名="value0 value1 value2 value3 ...... "
数组名=($列表名)
-
数组名[0]="value1"
数组名[1]="value2"
数组名[2]="value3"
引用数组的值
[root@localhost ~]# echo ${!array[*]}
#查看下标
0 1 2 3 4
[root@localhost ~]# echo ${array[0]} //获取第一个元素的值
[root@localhost ~]# echo ${array[-1]} //获取最后一个元素的值
[root@localhost ~]# echo ${array[-2]} //获取倒数第二个元素的值
[root@localhost ~]# echo ${a[*]} //列出所有参数
1 2 3 4 5
[root@localhost ~]# echo ${a[@]} //@同*
1 2 3 4 5
[root@localhost ~]# echo ${#a[@]} //前面加#数组的长度
5
[root@localhost ~]# echo ${#a[*]}
5
数组分片(数组截取)
格式:
${数组名[@]:起始位置:截取长度} //起始位置从0算起
${数组名[@]} //获取整个数组的元素值
${数组名[@]:0:3} //从下标为0的元素开始截取,共截取3个元素。(即截取元素1到元素3)
${数组名[@]:2:2} //从下标为2的元素开始截取,共截取2个元素。(即截取元素3到
数组元素替换
1、临时替换(不会影响原有数组)
echo ${数组名[@]/旧字符/新字符} //会替换所有元素中能匹配到的字符,但这是临时替换,不会改变原有数组的值
示例1:将30替换为100
[root@yuji ~]# arr2=(10 20 30 40) //定义数组
[root@yuji ~]# echo ${arr2[@]} //查看数组内的所有元素
10 20 30 40
[root@yuji ~]# echo ${arr2[@]/30/100} //将30临时替换为100
10 20 60 40
[root@yuji ~]# echo ${arr2[@]} //不会改变原有数组内的元素值
10 20 30 40
2、重新赋值(永久替换)
数组名=(${数组名[@]/旧字符/新字符})
示例:将30重新赋值为200
[root@yuji ~]# echo ${arr2[@]}
10 20 30 40
[root@yuji ~]# arr2=(${arr2[@]/30/200}) //重新赋值
[root@yuji ~]# echo ${arr2[@]} //会改变原有数组的元素值
10 20 200 40
增加数组内的元素
方法1:数组名[n]=元素值 //使用下标值直接增加元
方法2:数组名+=(元素值)
[root@localhost ~]# echo ${a[@]}
1 2 3 4 5
[root@localhost ~]# a+=(6) //增加元素值6
[root@localhost ~]# echo ${a[@]}
1 2 3 4 5 6
[root@localhost ~]# a+=(7 8 9) //增加元素值7、8、9
[root@localhost ~]# echo ${a[@]}
1 2 3 4 5 6 7 8 9
方法3:数组名[数组长度]=元素值
[root@yuji ~]# cc[${#cc[@]}]=60 //"${#cc[@]"可以获取数组长度
方法4:数组名=("${数组名[@]}" 元素1 元素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
删除数组
1、删除数组内的某个元素
unset 数组名[n] //删除数组内的某一个元素,n为下标值
示例:
[root@yuji ~]# echo ${aa[@]}
10 20 30 40
[root@yuji ~]# unset aa[2] //删除下标值为2的元素
[root@yuji ~]# echo ${aa[@]} //30已被删除
10 20 40
2、删除整个数组
unset 数组名[*]
或
unset 数组名[@]
查看所有的数组
命令:declare -a