在 Shell 脚本中,使用数组和字典(关联数组)可以方便地处理参数。以下是它们的介绍:
1、数组
Shell 中的数组类似于其他编程语言中的数组,它是一个用于存储多个值的变量。在 Bash 和其他类 Unix shell 中,可以使用以下语法来创建和操作数组:
1.1 定义数组
定义数组需要使用 array_name=(value1 value2 ...) 的格式。例如:
my_array=(apple banana orange)
这将创建一个名为 my_array 的数组,包含三个元素:apple、banana 和 orange.
1.2 访问数组
[root@entos7 expr_test]# a=apple
[root@entos7 expr_test]# b=banana
[root@entos7 expr_test]# c=orange
[root@entos7 expr_test]# myarray=( $a $b $c)
[root@entos7 expr_test]# echo ${myarray[0]} #索引从0开始
apple
[root@entos7 expr_test]# echo ${myarray[@]}
apple banana orange
[root@entos7 expr_test]# echo ${myarray[*]}
apple banana orange
[root@entos7 expr_test]# echo ${#myarray[*]}
3
[root@entos7 expr_test]# echo ${#myarray[@]}
3
1.4 遍历数组
# 知道数组长度的情况下,可以使用这种方法
[root@entos7 expr_test]# for i in `seq 3`;do echo ${myarray[((i-1))]};done
apple
banana
orange
# 方法2
for i in ${myarray[@]};do echo $i;done
apple
banana
orange
或者使用 C 风格的 for 循环:
[root@entos7 expr_test]# for (( i=0; i<${#myarray[@]}; i++ ));do echo ${myarray[$i]};done
apple
banana
orange
2、字典
字典也是一种数组,但是每个元素都有一个键和一个值。在 Bash 和其他类 Unix shell 中,可以使用以下语法来创建和操作字典:
2.1 定义
定义字典需要使用 declare -A dict_name 的格式,并用 dict_name[key]=value 的方式为字典添加键值对。例如:
[root@entos7 expr_test]# declare -A dict1
[root@entos7 expr_test]# dict1["key1"]="value1"
[root@entos7 expr_test]# dict1["key2"]="value2"
[root@entos7 expr_test]# dict1["key3"]="value3"
这将创建一个名为 dict1 的字典,包含三个键值对:"key1"=>"value1" ,"key2"=>"value2"和`"key3"=>"value3"
2.2 访问字典
要访问字典中的值,可以使用 ${dict_name[key]} 的语法,其中 key 是元素的键。例如,要访问 dict1 字典中的 "key1" 值,可以这样做
[root@entos7 expr_test]# echo ${dict1["key1"]}
value1
2.3 获取字典中的键和值
要获取字典中的所有键,可以使用 ${!dict_name[@]}。要获取字典中的所有值,可以使用 ${dict_name[@]},例如
[root@entos7 expr_test]# echo ${!dict1[@]}
key3 key2 key1
[root@entos7 expr_test]# echo ${dict1[@]}
value3 value2 value1
2.4 遍历字典
要遍历字典中的所有键值对,可以使用循环语句。例如,使用 for 循环:
[root@entos7 expr_test]# for key in ${!dict1[@]};do echo "$key: ${dict1[$key]}";done
key3: value3
key2: value2
key1: value1
2.5 修改字典的值
[root@entos7 expr_test]# dict1["key1"]="value4"
2.6 检测键是否存在
[root@entos7 expr_test]# if [ -v dict["key4"] ]
> then
> echo "key4 exists in dict1"
> else
> echo "key4 not exists"
> fi
key4 not exists
2.7 删除键值对
[root@entos7 expr_test]# unset dict[key3]
[root@entos7 expr_test]# for key in ${!dict1[@]};do echo "$key: ${dict1[$key]}";done
key2: value2
key1: value1
浙公网安备 33010602011771号