三分薄地,认真耕耘

导航

 

在 Shell 脚本中,使用数组和字典(关联数组)可以方便地处理参数。以下是它们的介绍:

1、数组

Shell 中的数组类似于其他编程语言中的数组,它是一个用于存储多个值的变量。在 Bash 和其他类 Unix shell 中,可以使用以下语法来创建和操作数组:

1.1 定义数组

定义数组需要使用 array_name=(value1 value2 ...) 的格式。例如:


my_array=(apple banana orange)

这将创建一个名为 my_array 的数组,包含三个元素:applebanana 和 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

posted on 2025-05-27 21:47  平复心态  阅读(120)  评论(0)    收藏  举报