在日常编写shell的过程中,数组是一个非常常用到的内容。我们这里简要介绍两种数组的使用方式。一种常规数组,一个中关联数组。差异就是常规数组,只能用整数作为下标来进行数据的存取。而关联数组能够使用字符作为小标来进行存储。

 

 

常规数组

1)  初始化

数组中的多个变量用括号来括起来,变量间用空格来间隔开来。

root@docker-host-03:~/test_shell#./demo1.sh

1 2 3 4 5

1 2 3 4

root@docker-host-03:~/test_shell# moredemo1.sh

#!/bin/bash

 

a=( 1 2 3 4 5 )

b=(1

  2

  3

  4

)

#Print the arry

echo ${a[*]}

echo ${b[*]}

 

将文本的内容以行为单位存到数组中

root@docker-host-03:~/test_shell# vim list

root@docker-host-03:~/test_shell# a=(`catlist`)

root@docker-host-03:~/test_shell# echo${a[*]}

line2 line3 line4 line5 line5 line6

root@docker-host-03:~/test_shell# echo${a[1]}

line3

root@docker-host-03:~/test_shell# cat list

line2

line3

line4

line5

line5

line6

这里再多提一个就是循环遍历文本中的每一个行

root@docker-host-03:~/test_shell# whileread line;do echo $line ;done < list

line2

line3

line4

line5

line5

line6

root@docker-host-03:~/test_shell#./demo1.sh  

do something: line2

do something: line3

do something: line4

do something: line5

do something: line5

do something: line6

do something:

root@docker-host-03:~/test_shell# moredemo1.sh

#!/bin/bash

 

cat list | while read line;do

 

   echo "do something: $line"

done

 

 

2)数据存取

获取某个指定的变量

root@docker-host-03:~/test_shell# echo${a[1]}

line3

root@docker-host-03:~/test_shell# echo${a[2]} 

line4

获取变量所有值

root@docker-host-03:~/test_shell# echo${a[@]}

line2 line3 line4 line5 line5 line6

root@docker-host-03:~/test_shell# echo${a[*]}

line2 line3 line4 line5 line5 line6

root@docker-host-03:~/test_shell#

倒序的获取数组变量

root@docker-host-03:~/test_shell# echo${a[-2]}

line5

root@docker-host-03:~/test_shell# echo${a[-4]}

line4

获取数组的长度

root@docker-host-03:~/test_shell# echo${#a[*]}

6

root@docker-host-03:~/test_shell# echo${#a[@]}

6

 

 

2)  赋值&清楚某个小标值

root@docker-host-03:~/test_shell#echo ${#a[@]}

6

root@docker-host-03:~/test_shell#echo ${a[*]}

line2line3 line4 line5 line5 line6

root@docker-host-03:~/test_shell#unset a[3]

root@docker-host-03:~/test_shell#echo ${a[*]}

line2line3 line4 line5 line6

root@docker-host-03:~/test_shell#echo ${#a[@]}

5

 

3)  分片存取

${数组名[@*]:起始位置:长度}切片原先数组,返回是字符串

root@docker-host-03:~/test_shell#echo ${a[@]:1:1}

line3

root@docker-host-03:~/test_shell#echo ${a[@]:1:2}

line3 line4

 

4)  替换内容

root@docker-host-03:~/test_shell#echo ${a[*]}

line2line3 line4 line5 line6

root@docker-host-03:~/test_shell#echo ${a[*]/2/test}

linetestline3 line4 line5 line6

root@docker-host-03:~/test_shell#echo ${a[*]/2/ test}

line test line3 line4 line5 line6

 

root@docker-host-03:~/test_shell#b=(${a[*]/2/ test})    

root@docker-host-03:~/test_shell#echo $b

line

root@docker-host-03:~/test_shell#echo ${b[@]}

line testline3 line4 line5 line6

root@docker-host-03:~/test_shell#echo ${a[@]}

line2 line3 line4 line5 line6

 

 

关联数组

declare参考链接:

http://blog.csdn.net/tutuboke/article/details/50440598

关联数组和常规数组的差异就是,关联数组能够使用字符串来作为。其他的操作方法和常规数组是一样的,能分片,能消除。

初始化

root@docker-host-03:~#declare -A aa_array

root@docker-host-03:~#aa_array['index1']='value1'

root@docker-host-03:~#aa_array['index2']='value2'

root@docker-host-03:~#aa_array['index3']='value3'

root@docker-host-03:~#echo ${aa_array[@]}

value1 value2 value3

 

另一种赋值方式

root@docker-host-03:~#declare  -A a_array=( ['i1']='v1'['i2']='v2' ['i3']='v3' )

root@docker-host-03:~#echo ${a_array[@]}

v3 v2 v1