在日常编写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
本文出自 “从头开始” 博客,请务必保留此出处http://atong.blog.51cto.com/2393905/1912203
原文地址:http://atong.blog.51cto.com/2393905/1912203