Shell脚本学习-shell数组

数组:就是元素的集合,把有限个元素(变量或者字符)用一个名字来命名,然后用编号对它们进行区分。这个名字就是数组名。数组下标用于区分不同内容的编号。组成数组的各个元素变量称为数组的元素(下标变量)。

使用数组可以简化程序的开发。

数组的定义:

方法1:

array=(value1 value2 value3...)

这是常用定义方法,掌握这种方法即可。

打印元素:

[root@abc scripts]# array=(1 2 3 4 5)
[root@abc scripts]# echo ${array[*]}
1 2 3 4 5
[root@abc scripts]# echo ${array[@]}
1 2 3 4 5

[root@abc scripts]# echo ${array[1]}
2
[root@abc scripts]# echo ${array[0]}
1
[root@abc scripts]# echo ${array[2]}
3

打印数组元素的个数:

[root@abc scripts]# echo ${#array[*]}
5
[root@abc scripts]# echo ${#array[@]}
5

这跟之前的变量子串的概念是一样的。很好理解。

数组赋值:

[root@abc scripts]# array[5]=six
[root@abc scripts]# echo ${array[*]}
1 2 3 4 5 six

对数组进行引用赋值,如果下标不存在,则自动添加一个新的数组元素,如果下标存在,则覆盖原来的值。

数组的删除:

[root@abc scripts]# unset array[5]
[root@abc scripts]# echo ${array[*]}
1 2 3 4 5

unset这个命令有点类似取消环境变量的意思,也是很好理解的。

示例1:通过竖向列举法定义数组元素并批量打印。

[root@abc scripts]# cat array1.sh
#!/bin/bash

array=(
chang1
chang2
chang3
chang4
chang5
)

for ((i=0;i<${#array[*]};i++))
do
    echo -e "No: $i \t Value: ${array[$i]}"
done

运行结果:

[root@abc scripts]# sh array1.sh
No: 0    Value: chang1
No: 1    Value: chang2
No: 2    Value: chang3
No: 3    Value: chang4
No: 4    Value: chang5

说明:

对于元素特别长的情况,例如URL地址,将其竖向列出来看起来更舒服和规范。

那说明这种情况空格分隔符和分行符都能用来区分元素。

示例2:将命令结果作为数组元素定义并打印。

准备场景:

[root@abc scripts]# mkdir -p /array/
[root@abc scripts]# touch /array/{1..5}.txt
[root@abc scripts]# ls /array/
1.txt  2.txt  3.txt  4.txt  5.txt

脚本:

[root@abc scripts]# cat array2.sh
#!/bin/bash
dir=($(ls /array/))
# dir=(`ls /array/`)

for ((i=0;i<${#dir[*]};i++))
do
  echo -e "No: $i \t Filename: ${dir[$i]}"
done
[root@abc scripts]# sh array2.sh
No: 0    Filename: 1.txt
No: 1    Filename: 2.txt
No: 2    Filename: 3.txt
No: 3    Filename: 4.txt
No: 4    Filename: 5.txt

这是动态数组,类似:array=($(ls)),里面ls是命令通过反引号或者$()将结果显示出来,这个结果应该是一组元素,分隔符为空格。然后再将这些结果放到数组中进行赋值。

你可能感兴趣的:(Shell,linux)