shell中数组扩展技巧及实例

1、申明数组

例一:

a=(111 222)    #一对括表示是数组,数组元素用“空格“符号分割开。

echo ${a[0]}    #数组下标从0开始

echo $a          #数组也是指针形似,数组名称相当于一个指针,指向第一个数组元素

输出:

111

111 


例二:

a=([0]=111 [1]=222)


例三:

a[0]=111

a[1]=222


2、数组的控制台输入

例一:

read a[0]   #输入222回车

read a[1]   #输入333回车

echo ${#a[@]}

输出:2


3、数组元素的删除

例一:

a=(111 222)

unset a[1]    #删除a[1]元素

echo ${#a[@]}

输出:1


例二:

a=(111 222 333)

unset a        #删除a数组

echo ${#a[@]}

输出:0


4、取数组的元素个数

规则:${#数组变量[@]}或${#数组变量[*]}

例一:

echo ${#a[@]}    #对于shell脚本传参数,$@表示所有的参数,$#表示参数的个数,不难理解,数组也是这样

输出:2


5、取数组索引列表

规则:${!数组变量[@]}或${!数组变量[*]}
含义:把数组变量所有的索引列出,各索引值之间用空格符分开

例一:

filelist=(/etc/passwd  /etc/issue  /etc/sysconfig/syslog)
for  index  in ${!filelist[@]}
do 
       echo "index  $index:${filelist[$index]}"
done

输出:

index  0:/etc/passwd
index  1:/etc/issue
index  2:/etc/sysconfig/syslog


6、子串提取

规则:${数组变量[@]:startindex:length}或${#数组变量[*]:startindex:length}

例一:

a=(111 222 333 444 555)

echo  ${a[@]:0:3}  #在数组中可以用:n进行数组的范围分片,显示一个范围的数值


7、子串替换

a=(111 222 333 444 555)

例一:第一个匹配到的,会被替换

echo ${a[@]/1/6}

输出:

611 222 333 444 555


例二:所有匹配到的,会被替换

echo ${a[@]//1/6}

输出:

666 222 333 444 555


例三:没有指定替换子串,则删除匹配到的子符

echo ${a[@]//1/}

输出:

222 333 444 555


例四:替换字符串前端子串

echo ${a[*]/#1/6}

611 222 333 444 555


例五:替换字符串后端子串

echo ${a[*]/%1/6}

输出:

116 222 333 444 555


小技巧:

1.生成30个#字符

seq -s '#' 30 | sed -e 's/[0-9]*//g'




发布了36 篇原创文章 · 获赞 12 · 访问量 41万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章