数组介绍
数组就是一种数据结构,多个变量的集在内存中存储是一段连续的内存空间,属组中的每一个变量称为一个元素(element)。在Shell中数组有两种,分别是普通数组和关联数组,区别在于:
普通数组:只能使用整数作为数组的索引,使用索引引用元素。
关联数组:可以使用字符串作为数组引用,使用索引引用元素。
普通数组赋值和引用
数组赋值方法1:
1 2 3 4 5 |
# Array_name数组中的元素有7个,345元素为空可后续赋值; [root@localhost ~]# array_name[0]=”tom” [root@localhost ~]# array_name[1]=”andy” [root@localhost ~]# array_name[2]=”Jerry” [root@localhost ~]# array_name[6]=”Selina” |
数组赋值方法2:
1 2 3 4 5 |
# arrayname数组中的元素默认按照0编号往后排序,注意中间有空格; [root@localhost ~]# array_name=("tom" "andy" "jerry" "selina") # arrayname数组中的元素有7个,345元素为空可后续赋值; [root@localhost ~]# array_name=([0]="tom" [1]="andy" [2]="jerry" [6]="selina") |
获取数组元素
1 2 |
# 引用索引来引用元素,如果不使用[0],默认就会引用第一个元素。 [root@localhost ~]# echo ${array_name[0]} |
获取数组所有元素
1 2 3 |
[root@localhost ~]# echo ${array_name[*]} 或 [root@localhost ~]# echo ${array_name[@]} |
获取数组中有效元素字符串长度
1 |
[root@localhost ~]# echo ${#array_name[0]} |
关联数组
1 2 3 4 5 6 |
# 声明关联数组; [root@localhost ~]# declare -a array_name # 关联数组的赋值,引用等方法都同于普通数组; [root@localhost ~]# array_name[a]= "tom" [root@localhost ~]# array=([a]="tom" [b]="andy") |
实例
01)脚本编程之:随机抽取一个名字
1 2 3 4 5 6 |
#!/bin/bash # declare -a array_name array_name=([0]="tom" [1]="andy" [2]="jerry" [6]="selina") INDEX=$[$RANDOM%7] echo ${array_name[$INDEX]} |
02)脚本编程之:从固定数中抽取一个最大数
1 2 3 4 5 6 7 8 9 10 11 |
#!/bin/bash # AA=(34 24 28 58 34 23 75 36 93 87) declare -i MAX=${AA[0]} INDEX=$[${#AA[*]} - 1] for i in `seq 1 $INDEX`; do if [ $MAX -lt ${AA[$i]} ] ; then MAX=${AA[$i]} fi done echo $MAX |
03)脚本编程之:从随机数中抽取一个最大数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
#!/bin/bash # for i in {0..5}; do AA[$i]=$RANDOM sleep 1 echo ${AA[$i]} done echo declare -i MAX=${AA[0]} INDEX=$[${#AA[*]} - 1] for i in `seq 1 $INDEX`; do if [ $MAX -lt ${AA[$i]} ] ; then MAX=${AA[$i]} fi done echo "MAX: $MAX" |
04)脚本编程之:随机抽取几个数并保证不会重复
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#!/bin/bash # read -p "The element numbers[1-39]:" ELENUM declare -a ARRAY function COMELE { for J in `seq 0 $[${#ARRAY[@]}-1]`; do if [ $1 -eq ${ARRAY[$J]} ]; then return 1 fi done return 0 } for I in `seq 0 $[$ELENUM-1]`; do while true; do ELEMENT=$[$RANDOM%40] COMELE $ELEMENT if [ $? -eq 0 ]; then break fi done ARRAY[$i]=$ELEMENT echo "${ARRAY[$i]}" done |