您的位置:首页 > 运维架构 > Shell

shell中数组扩展技巧及实例

2012-09-10 18:08 288 查看
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'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: