一、普通数组
1.数组的定义
arr=(1 2 3 4 5 6)
2.数组元素的读取
echo ${arr[0]} #输出arr[0]
# 1
echo ${arr[*]} #输出整个数组内容
# 1 2 3 4 5 6
echo ${arr[@]} #输出整个数组内容
# 1 2 3 4 5 6
3.遍历数组 (for 循环)
for 变量名 in 循环的条件
do
command
done
如:
for i in ${arr[*]}
do
echo $i
done
4.数组的长度
${#数组名[*或@]}
echo ${#arr[@]}
# 6
5.赋值
arr[6]=7
echo ${arr[*]}
# 1 2 3 4 5 6 7
6.分片 格式:
${数组名[*或@]:起始位:长度},截取部分数组,返回字符串,中间用空格分隔;
将结果使用“()”,则得到新的切片数组
echo ${arr[@]:0:4}
# 1 2 3 4
arr1=(${arr[@]:0:4})
echo ${arr1[*]}
# 1 2 3 4
7.替换元素,格式:
${数组名[*或@]/查找字符/替换字符}, 不会修改原数组;
如需修改的数组,将结果使用“()”赋给新数组
echo ${arr[*]}
# 1 2 3 4 5 6 7
echo ${arr[*]/7/99}
# 1 2 3 4 5 6 99
arr2=(${arr[*]/7/99})
echo ${arr2[*]}
# 1 2 3 4 5 6 99
8.删除数组 格式:
unset 数组 清除整个数组;
unset 数组[下标],清除单个元素
echo ${arr[@]}
# 1 2 3 4 5 6 7
unset arr[0]
# 2 3 4 5 6 7
unset arr
# 没有元素
例:写一个脚本让用户输入多个城市的名字(可以是中文),要求不少于5个,然后把这些城市存到一个数组里,最后用一个for循环把他们打印出来。
#!/bin/bash
read -p "请输入至少5个城市的名字,用空格分隔:" city
#用一个字符串来存储五个城市,中间用空格分开
n=`echo $city|awk '{print NF}'`
#空格为AWK的默认分隔符,NF为字段数
if [ $n -lt 5 ]
then
echo "输入的城市个数至少为5"
exit
fi
name=($city) #赋值
for i in ${name[@]}
do
echo $i
二、关联数组
1、关联数组的定义
首先,需要使用声明语句将一个变量声明为关联数组。如:
declare -A ass_array
#-A 关联数组
#-a 普通数组
声明之后,可以用两种方法将元素添加到关联数组中。
利用内嵌“索引-值”列表的方法,提供一个“索引-值”列表:
ass_array=([index1]=val1 [index2]=val2)
使用独立的“索引-值”进行赋值:
ass_array[index1]=val1
ass_array[index2]=val2
declare -A fruits
fruits=([apple]='100 dollars' [orange]='150 dollars')
echo "Apple costs ${fruits[apple]}"
#100 dollars
列出列表的索引
echo ${!ass_array[*]}
#orange apple
列出列表的键值
echo ${ass_array[*]} #与普通数组类似
100 dollars 150 dollars
(注:shell的数组,关联数组与awk 的数组不同,需要注意区分!)