目录
一、shell数组的定义
-
数组中可以存放多个值。Bash Shell 只支持一维数组(不支持多维数组)
-
数组元素的下标由 0 开始。
-
Shell 数组用括号来表示,元素用"空格"符号分割开
-
在shell语句中,使用、遍历数组的时候,数组格式要写成 ${arr[@]} 或 ${arr[*]}
二、定义数组的方法
法一:
数组名=(value1 value2 value3...)
[root@localhost ~]# num=(1 2 3 4 5 6)
[root@localhost ~]# echo ${num[@]}
1 2 3 4 5 6
法二:
数组名=([0]=value0 [1]=value1......)
[root@localhost ~]# num1=([0]=1 [1]=2 [2]=3 [3]=4 [4]=5 [5]=6)
[root@localhost ~]# echo ${num1[@]}
1 2 3 4 5 6
法三:
数组名[0]="value"
数组名[1]="value"
数组名[2]="value"
数组名[3]="value"
[root@localhost ~]# c[0]=1
[root@localhost ~]# c[1]=2
[root@localhost ~]# c[2]=3
[root@localhost ~]# c[3]=4
[root@localhost ~]# echo ${c[@]}
1 2 3 4
三、数组的数据类型
-
数值类型、字符类型、混合类型...
[root@localhost ~]# cc=(1 2 a ass)
[root@localhost ~]# echo ${cc[@]}
1 2 a ass
四、获取数组的数据列表
echo ${数组名[*]}
echo ${数组名[@]}
五、获取数组长度
echo ${#数组名[*]}
echo ${#数组名[@]}
六、获取数组下标对应的值
下标从零开始
数组名=(元素0 元素1 元素2 ……)
echo ${数组名[索引值]} 输出数组索引值对应的元素,索引值为从0开始echo ${数组名[0]}
[root@localhost ~]# echo ${c[@]}
1 2 3 4
[root@localhost ~]# echo ${c[0]}
1
[root@localhost ~]# echo ${c[2]}
3
七、数组的常用操作
7.1数组的遍历
7.2数组切片
[root@localhost ~]# echo ${a[@]}
1 2 3 4 65 66 输出数组
[root@localhost ~]# echo ${a[@]:1:3}
2 3 4 输出数组1-3下标的值
[root@localhost ~]# echo ${a[@]:1:1}
2
[root@localhost ~]# echo ${a[@]:1:8}
2 3 4 65 66 输出数组1后面的所有元素
7.3数组替换
#临时替换
[root@yxp data]#echo ${a[@]/4/7}
#重新赋值,可以永久修改
[root@yxp data]#a=(${a[@]/4/7})
#临时替换
[root@localhost ~]# echo ${a[*]}
1 2 3 4 5 6 7 8 9
[root@localhost ~]# echo ${a[*]/4/7}
1 2 3 7 5 6 7 8 9
[root@localhost ~]# a=(1 2 3 4 5 6 74 8 9)
[root@localhost ~]# echo ${a[*]/4/7}
1 2 3 7 5 6 77 8 9 这里的替换是把数组中所有的4都替换掉
7.4数组删除和指定下标的值删除
unset 数组名
unset 数组名[下标]
7.5数组追加元素
法一:直接使用下标进行元素的追加
数组名[下标]=变量
法二:将数组的长度作为下标进行追加元素(其实就是将下标换了一种表达方式)
数组名[${数组名[@]}]=变量名
法三:使用+=进行追加
数组名+=(变量1 变量2 ...)
查看所有数组—declare -a
向函数传数组参数
//将一个数组当做参数列表传入函数执行,实现数组值翻倍
[root@localhost1 ~]#vim chuancan.sh
#!/bin/bash
test1() {
arrlist=($@) #关键在这里获取数组传入的参数
for ((i=0;i<${#arrlist[@]};i++))
do
newarr[$i]=$[${arrlist[$i]} * 2]
done
echo ${newarr[@]}
}
arr=(10 20 30 40 50)
echo "原始数组为:${arr[@]}"
result=$(test1 ${arr[@]})
echo "数组值翻倍后为:$result"
[root@localhost1 ~]#bash chuancan.sh
原始数组为:10 20 30 40 50
数组值翻倍后为:20 40 60 80 100