linux shell 数组有关的一些知识

myccc 2012-09-25

linuxshell数组有关的一些知识

2人收藏此文章,我要收藏发表于7个月前(2012-02-0218:25),已有607次阅读共0个评论

Linuxshell在编程方面比Windows批处理强大太多,无论是在循环、运算。已经数据类型方面都是不能比较的。下面是个人在使用时候,对它在数组方面一些操作进行的总结。

1.数组定义

[www.linuxidc.com@linuxidc~]$a=(12345)

[www.linuxidc.com@linuxidc~]$echo$a

1

一对括号表示是数组,数组元素用“空格”符号分割开。

2.数组读取与赋值

•得到长度:

[www.linuxidc.com@linuxidc~]$echo${#a[@]}

5

用${#数组名[@或*]}可以得到数组长度

•读取:

[www.linuxidc.com@linuxidc~]$echo${a[2]}

3

[www.linuxidc.com@linuxidc~]$echo${a

}12345

用${数组名[下标]}下标是从0开始下标是:*或者@得到整个数组内容

•赋值:

[www.linuxidc.com@linuxidc~]$a[1]=100

[www.linuxidc.com@linuxidc~]$echo${a

}1100345

[www.linuxidc.com@linuxidc~]$a[5]=100

[www.linuxidc.com@linuxidc~]$echo${a

}

1100345100

直接通过数组名[下标]就可以对其进行引用赋值,如果下标不存在,自动添加新一个数组元素

•删除:

[www.linuxidc.com@linuxidc~]$a=(12345)

[www.linuxidc.com@linuxidc~]$unseta

[www.linuxidc.com@linuxidc~]$echo${a

}

[www.linuxidc.com@linuxidc~]$a=(12345)

[www.linuxidc.com@linuxidc~]$unseta[1]

[www.linuxidc.com@linuxidc~]$echo${a

}1345

[www.linuxidc.com@linuxidc~]$echo${#a

}4

直接通过:unset数组[下标]可以清除相应的元素,不带下标,清除整个数据。

3.特殊使用

•分片:

[www.linuxidc.com@linuxidc~]$a=(12345)

[www.linuxidc.com@linuxidc~]$echo${a[@]:0:3}

123

[www.linuxidc.com@linuxidc~]$echo${a[@]:1:4}

2345

[www.linuxidc.com@linuxidc~]$c=(${a[@]:1:4})

[www.linuxidc.com@linuxidc~]$echo${#c[@]}

4

[www.linuxidc.com@linuxidc~]$echo${c

}2345

直接通过${数组名[@或*]:起始位置:长度}切片原先数组,返回是字符串,中间用“空格”分开,因此如果加上”()”,将得到切片数组,上面例子:c就是一个新数据。

•替换:

[www.linuxidc.com@linuxidc~]$a=(12345)

[www.linuxidc.com@linuxidc~]$echo${a[@]/3/100}

1210045

[www.linuxidc.com@linuxidc~]$echo${a[@]}

12345

[www.linuxidc.com@linuxidc~]$a=(${a[@]/3/100})

[www.linuxidc.com@linuxidc~]$echo${a[@]}

1210045

调用方法是:${数组名[@或*]/查找字符/替换字符}该操作不会改变原先数组内容,如果需要修改,可以看上面例子,重新定义数据。

=================================================================

linuxshell数组有关的一些知识

BASH只支持一维数组,但参数个数没有限制。

声明一个数组:

declare-aarray

(其实不用声明,按数组方式直接赋值给变量即可,BASH就知道那是数组)

数组赋值:

(1)array=(var1var2var3...varN)

(2)array=([0]=var1[1]=var2[2]=var3...[n]=varN)

(3)array[0]=var1

arrya[1]=var2

...

array[n]=varN

计算数组元素个数:

${#array[@]}或者${#array

}

BASH的特殊参数@和*都表示“扩展位置参数,从1开始”,但形式稍有差异,但在数组里使用好像是可以通用的。

引用数组:

echo${array[n]}

遍历数组:

filename=(`ls`)

forvarin${filename[@]};do

echo$var

done

数组实用示例:(个人收集整理)

1、从“标准输入”读入n次字符串,每次输入的字符串保存在数组array里

i=0

n=5

while["$i"-lt$n];do

echo"Pleaseinputstrings...`expr$i+1`"

readarray[$i]

b=${array[$i]}

echo"$b"

i=`expr$i+1`

done

2、将字符串里的字母逐个放入数组,并输出到“标准输出”

chars='abcdefghijklmnopqrstuvwxyz'

for((i=0;i<26;i++));do

array[$i]=${chars:$i:1}

echo${array[$i]}

done

这里有趣的地方是${chars:$i:1},表示从chars字符串的$i位置开始,获取1个字符。如果将1改为3,就获取3个字符啦~结果是:

abc

bcd

...

vxy

xyz

yz//没有足够字符串获取了

z//没有足够字符串获取了

3、将数组应用到shell环境变量

3、将数组应用到shell环境变量(1)

数组赋值:

[root@pps~]#SEASON=("Srping""Summer""Autumn""Winter")

当你发现赋值错了,也可以立刻从新赋值纠正,如上面的Spring被写成Srping。

重新赋值:(原来的值被重写)

[root@pps~]#SEASON=("Spring""Summer""Autumn""Winter")

查看一下环境变量:

[root@pps~]#set|grepSEASON

SEASON=([0]="Spring"[1]="Summer"[2]="Autumn"[3]="Winter")

显示整个数组:

[root@pps~]#echo${SEASON

}或者echo${SEASON[@]}SpringSummerAutumnWinter

显示某一数组元素:

[root@pps~]#echo${SEASON[3]}

Winter

给单个数组元素赋值:

[root@pps~]#SEASON[0]="New_Spring"

再查看一下看数组:

[root@pps~]#echo${SEASON

}New_SpringSummerAutumnWinter

清除指定的单个数组元素:

[root@pps~]#unsetSEASON[2]

清除整个数组:

[root@pps~]#unsetSEASON

4、将数组应用到shell环境变量(2)【这个用法不错!给原作者赞一个!】

使用tr命令将文件中的回车转换成空格:

[root@pps~]#cat/etc/shells|tr"\n""">/tmp/tmp.file

将文件中内容给数组赋值:(碰到第一个回车符之前的内容)

[root@pps~]#read-aSHELLS</tmp/tmp.file

查看数组赋值情况:

[root@pps~]#set|grep"SHELLS"

SHELLS=([0]="/bin/sh"[1]="/bin/bash"[2]="/sbin/nologin"[3]="/bin/tcsh"[4]="/bin/csh"[5]="/bin/ksh")

后面可以将这个数组环境变量应用到其它的SHELL脚本或者应用程序里了~

相关推荐