较新的Bash版本支持一维数组.数组元素可以用符号variable[xx]来初始化.另外,脚本可以用declare-avariable语句来清楚地指定一个数组.要访问一个数组元素,可以使用花括号来访问,即${variable[xx]}.例1.简单的数组用法 1#!/bin/bash 2 3 4area[11]=23 5area[13]=37 6area[51]=UFOs 7 8# 数组成员不必一定要连贯或连续的. 9 10# 数组的一部分成员允许不被初始化. 11# 数组中空缺元素是允许的. 12# 实际上,保存着稀疏数据的数组(“稀疏数组”)在电子表格处理软件中非常有用. 13# 14 15 16echo-n"area[11]=" 17echo${area[11]} # {大括号}是需要的. 18 19echo-n"area[13]=" 20echo${area[13]} 21 22echo"Contentsofarea[51]are${area[51]}." 23 24#没有初始化内容的数组元素打印空值(NULL值). 25echo-n"area[43]=" 26echo${area[43]} 27echo"(area[43]unassigned)" 28 29echo 30 31#两个数组元素的和被赋值给另一个数组元素 32area[5]=`expr${area[11]}+${area[13]}` 33echo"area[5]=area[11]+area[13]" 34echo-n"area[5]=" 35echo${area[5]} 36 37area[6]=`expr${area[11]}+${area[51]}` 38echo"area[6]=area[11]+area[51]" 39echo-n"area[6]=" 40echo${area[6]} 41#这里会失败是因为整数和字符串相加是不允许的. 42 43echo;echo;echo 44 45#----------------------------------------------------------------- 46#另一个数组,"area2". 47#另一种指定数组元素的值的办法... 48#array_name=(XXXYYYZZZ...) 49 50area2=(zeroonetwothreefour) 51 52echo-n"area2[0]=" 53echo${area2[0]} 54#啊哈,从0开始计数(即数组的第一个元素是[0],而不是[1]). 55 56echo-n"area2[1]=" 57echo${area2[1]} #[1]是数组的第二个元素. 58#----------------------------------------------------------------- 59 60echo;echo;echo 61 62#----------------------------------------------- 63#第三种数组,"area3". 64#第三种指定数组元素值的办法... 65#array_name=([xx]=XXX[yy]=YYY...) 66 67area3=([17]=seventeen[24]=twenty-four) 68 69echo-n"area3[17]=" 70echo${area3[17]} 71 72echo-n"area3[24]=" 73echo${area3[24]} 74#----------------------------------------------- 75 76exit0 Bash允许把变量当成数组来操作,即使这个变量没有明确地被声明为数组. 1string=abcABC123ABCabc 2echo${string[@]} #abcABC123ABCabc 3echo${string[*]} #abcABC123ABCabc 4echo${string[0]} #abcABC123ABCabc 5echo${string[1]} #没有输出! 6 #为什么? 7echo${#string[@]} #1 8 #数组中只有一个元素. 9 #且是这个字符串本身. 10 11#Thankyou,MichaelZick,forpointingthisout.例2.格式化一首诗 1#!/bin/bash 2#poem.sh:排印出作者喜欢的一首诗. 3 4#诗的行数(一小节诗). 5Line[1]="Idonotknowwhichtoprefer," 6Line[2]="Thebeautyofinflections" 7Line[3]="Orthebeautyofinnuendoes," 8Line[4]="Theblackbirdwhistling" 9Line[5]="Orjustafter." 10 11#出处. 12Attrib[1]="WallaceStevens" 13Attrib[2]="\"ThirteenWaysofLookingataBlackbird\"" 14#此诗是公众的(版权期已经到期了). 15 16echo 17 18forindexin12345 #5行. 19do 20 printf" %s\n""${Line[index]}" 21done 22 23forindexin12 #打印两行出处行. 24do 25 printf" %s\n""${Attrib[index]}" 26done 27 28echo 29 30exit0 31 32#练习: 33#-------- 34#修改这个脚本使其从一个文本文件中提取内容打印一首行. 数组元素有它们独有的语法,并且甚至Bash命令和操作符有特殊的选项可以支持数组使用.例3.多种数组操作 1#!/bin/bash 2#array-ops.sh:数组更多有趣的用法. 3 4 5array=(zeroonetwothreefourfive) 6#元素 0 1 2 3 4 5 7 8echo${array[0]} # zero 9echo${array:0} # zero 10 # 第一个元素的参数扩展, 11 #+从位置0开始(即第一个字符). 12echo${array:1} # ero 13 # 第一个元素的参数扩展, 14 #+从位置1开始(即第二个字符). 15 16echo"--------------" 17 18echo${#array[0]} # 4 19 # 数组第一个元素的长度. 20echo${#array} # 4 21 # 数组第一个元素的长度. 22 # (另一种写法) 23 24echo${#array[1]} # 3 25 # 数组第二个元素的长度. 26 # Bash的数组是0开始索引的. 27 28echo${#array[*]} # 6 29 # 数组中元素的个数. 30echo${#array[@]} # 6 31 # 数组中元素的个数. 32 33echo"--------------" 34 35array2=([0]="firstelement"[1]="secondelement"[3]="fourthelement") 36 37echo${array2[0]} #第一个元素 38echo${array2[1]} #第二个元素 39echo${array2[2]} # 40 #因为初始化时没有指定,因此值为空(null). 41echo${array2[3]} #第四个元素 42 43 44exit0 大部分标准的字符串操作符可以用于数组操作.例4.用于数组的字符串操作符 1#!/bin/bash 2#array-strops.sh:用于数组的字符串操作符. 3#由MichaelZick编码. 4#已征得作者的同意. 5 6# 一般来说,任何类似${name...}写法的字符串操作符 7#+都能在一个数组的所有字符串元素中使用 8#+像${name[@]...}或${name[*]...}的写法. 9 10 11arrayZ=(onetwothreefourfivefive) 12 13echo 14 15#提取尾部的子串 16echo${arrayZ[@]:0} #onetwothreefourfivefive 17 #所有的元素. 18 19echo${arrayZ[@]:1} #twothreefourfivefive 20 #在第一个元素element[0]后面的所有元素. 21 22echo${arrayZ[@]:1:2}
上一篇:shell脚本中的文件与归档命令_程序数据_shell
下一篇:列表结构_程序数据_shell