Shell中的数组

一、数组的定义

【数组元素的格式】

ARRAY[index]

index从0开始。

【定义数组】

在Bash中定义数组有两种方法:

(1)直接在定义时为所有的数组元素赋值:

[root@localhost shell]# ARRAY=(1 2 3 4 5)

(2)对数组中每个数组元素进行赋值:

[root@localhost shell]# ARRAY[0]=1; ARRAY[4]=5; ARRAY[3]=4

使用这种方法对数组定义时,可以不按照数组下标的先后顺序进行操作,也不必对数组中的每一个元素赋值。

提示:使用第二种方法时,如果出现了某些数组元素没有赋值的情况,系统将会自动将一个空值赋给这些元素。

(3)如果需要修改数组中某个元素的值,可以使用数组定义中的第二种方法:

[root@localhost shell]# ARRAY[1]=2
[root@localhost shell]# ARRAY[2]=3
...

二、数组的使用

(1)如果需要引用数组中的某个元素,可以使用数组名加索引的方式:

[root@localhost shell]# echo ${ARRAY[2]}
3

与其他语言中引用数组元素不同,在Bash中需要将数组元素放入大括号“{}”中,其目的是为了避免Bash将数组名误解为一个变量。

(2)如果不指定数组索引,将会显示数组中的第1个元素的值:

[root@localhost shell]# echo $ARRAY
1

(3)有时可能希望看到数组中所有元素的值,这样做的目的可能是为了检查其值是否有错误:

[root@localhost shell]# echo ${ARRAY[*]}
1 2 3 4 5

上面示例中,“*”表示所有下标,也可以使用“@”。

(4)当数组中的元素非常多时,可能查看起来非常不方便,这是可以指定查看的元素范围,例如:

#查看数组中下标大于等于2的所有元素的值
[root@localhost shell]# echo ${ARRAY[@]:2}
3 4 5

(5)有时需要获得数组的长度,即数组中一共有多少个元素。这是可以使用以下形式:

[root@localhost shell]# echo ${#ARRAY[@]}
5

(5)示例脚本,按数组元素的值从小到大排序:

[root@localhost shell]# cat example3.sh 
#!/bin/bash

#This is a example script.
#2013/12/16

ARRAY=(123 457 99 379 622 895 111 45 1000)
LENTH=${#ARRAY[@]}
I=0
while [ "$I" -lt "$LENTH" ]
do
        J=`expr $I + 1`
        while [ "$J" -lt "$LENTH" ]
        do
                if [ "${ARRAY[J]}" -lt "${ARRAY[I]}" ]
                then
                        TEMP=${ARRAY[J]}
                        ARRAY[J]=${ARRAY[I]}
                        ARRAY[I]=$TEMP
                fi
                J=`expr $J + 1`
        done
        I=`expr $I + 1`
done
echo ${ARRAY[@]}
unset ARRAY I J TEMP LENTH
[root@localhost shell]# ./example3.sh 
45 99 111 123 379 457 622 895 1000

三、清除数组

不再使用数组时,应该清楚数组,以回收这些数组占用的系统资源。与变量相同,清除数组也使用unset命令。

(1)清除数组ARRAY的第1个元素:

[root@localhost shell]# unset ARRAY[0]

(2)清除整个数组:

[root@localhost shell]# unset ARRAY
[root@localhost shell]# echo ${ARRAY[@]}
原文地址:https://www.cnblogs.com/nufangrensheng/p/3477331.html