让我给您详细讲解一下“Linux Shell脚本系列教程(六):数组和关联数组”的完整攻略。
一、数组
1. 数组的定义
定义数组的方式有两种:
- 类似于C语言的定义方式:
array_name=(value1 value2 value3 ...)
- 类似于Python的定义方式:
array_name=([0]=value1 [1]=value2 [2]=value3 ...)
注:数组元素的下标从0开始。
2. 数组的使用
2.1 访问数组元素
访问数组元素的方式是:${array_name[index]}
。
例如,如果我们定义了一个数组:
my_array=(apple banana peach orange)
想要访问第二个元素“banana”,可以这样写:
echo ${my_array[1]}
输出结果:
banana
2.2 获取数组长度
获取数组长度的方式是:${#array_name[@]}
。
例如,如果我们定义了一个数组:
my_array=(apple banana peach orange)
想要获取该数组长度,可以这样写:
echo ${#my_array[@]}
输出结果:
4
3. 数组的遍历
3.1 循环遍历数组元素
使用for循环遍历数组:
for item in ${my_array[@]}; do
echo $item
done
输出结果:
apple
banana
peach
orange
3.2 获取数组元素和下标
使用for循环遍历数组,并输出元素和其下标:
for i in ${!my_array[@]}; do
echo "Index:$i Value:${my_array[i]}"
done
输出结果:
Index:0 Value:apple
Index:1 Value:banana
Index:2 Value:peach
Index:3 Value:orange
4. 数组的拼接
使用“+”号将两个数组进行拼接:
array1=(apple banana)
array2=(peach orange)
array3=(${array1[@]} ${array2[@]})
echo ${array3[@]}
输出结果:
apple banana peach orange
5. 数组的切片
使用“:”号可以截取数组的一部分:
myarray=(apple banana peach orange)
echo ${myarray[@]:1:2}
输出结果:
banana peach
二、关联数组
关联数组是一种键值对的数组。
1. 关联数组的定义
定义关联数组的方式为:declare -A array_name
;给数组元素赋值的方式为:array_name[key]=value
。
例如:
declare -A my_array
my_array["apple"]=10
my_array["banana"]=20
my_array["orange"]=30
2. 关联数组的使用
2.1 访问数组元素
访问关联数组元素的方式是:${array_name[key]}
。
例如,如果我们定义了一个关联数组:
declare -A my_array
my_array["apple"]=10
my_array["banana"]=20
my_array["orange"]=30
想要访问“banana”的值,可以这样写:
echo ${my_array["banana"]}
输出结果:
20
2.2 获取关联数组键值数
获取关联数组键值数的方式是:${#array_name[@]}
。
例如,如果我们定义了一个关联数组:
declare -A my_array
my_array["apple"]=10
my_array["banana"]=20
my_array["orange"]=30
想要获取该数组键值数,可以这样写:
echo ${#my_array[@]}
输出结果:
3
3. 关联数组的遍历
3.1 循环遍历关联数组元素的key和value
使用for循环遍历关联数组,并输出key和value:
for key in ${!my_array[@]}; do
echo "Key:$key Value:${my_array[$key]}"
done
输出结果:
Key:apple Value:10
Key:banana Value:20
Key:orange Value:30
4. 关联数组的拼接
关联数组不支持直接拼接,需要使用其他方法实现。
例如,将两个关联数组拼接成一个新的关联数组:
declare -A my_array1
my_array1["apple"]=10
my_array1["banana"]=20
declare -A my_array2
my_array2["peach"]=30
my_array2["orange"]=40
for key in ${!my_array1[@]}; do
my_array3[$key]=${my_array1[$key]}
done
for key in ${!my_array2[@]}; do
my_array3[$key]=${my_array2[$key]}
done
for key in ${!my_array3[@]}; do
echo "Key:$key Value:${my_array3[$key]}"
done
输出结果:
Key:apple Value:10
Key:banana Value:20
Key:peach Value:30
Key:orange Value:40
示例说明
示例一
需求:定义一个数组scores
来保存4名学生的成绩,然后输出每个学生的成绩。
# 定义一个成绩数组
scores=(98 87 77 66)
# 遍历数组
for score in ${scores[@]}; do
echo $score
done
输出结果:
98
87
77
66
示例二
需求:定义一个关联数组scorelevel
,保存各个分数段的等级。
declare -A scorelevel
scorelevel["90"]="A"
scorelevel["80"]="B"
scorelevel["70"]="C"
scorelevel["60"]="D"
scorelevel["0"]="F"
score=87
for key in ${!scorelevel[@]}; do
if [ $score -ge $key ]; then
echo "Score:$score Grade:${scorelevel[$key]}"
break
fi
done
输出结果:
Score:87 Grade:B
以上就是关于“Linux Shell脚本系列教程(六):数组和关联数组”的完整攻略。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Linux Shell脚本系列教程(六):数组和关联数组 - Python技术站