linux shell在编程方面比windows 批处理强大太多,无论是在循环、运算。已经数据类型方面都是不能比较的。 下面是个人在使用时候,对它在数组方面一些操作进行的总结。
\UF#Xs01.数组定义
O?+f1~ C0[chengmo@centos5 ~]$ a=(1 2 3 4 5)
6HHk(| H|0[chengmo@centos5 ~]$ echo $a
.J|@|m([W01
!^4e~6z)tp0一对括号表示是数组,数组元素用“空格”符号分割开。51Testing软件测试网sgn^TgL"];j
2.数组读取与赋值51Testing软件测试网#b:g5I ~Xw
[chengmo@centos5 ~]$ echo ${#a[@]}
1EYM1Fd05
_O TOPq0
用${#数组名[@或*]} 可以得到数组长度
)G.B&E'\7V2K1pe0
[chengmo@centos5 ~]$ echo ${a[2]} 51Testing软件测试网Q.hAup,M
351Testing软件测试网:SQ2M?$I4^!_
[chengmo@centos5 ~]$ echo ${a[*]} 51Testing软件测试网Wi9~OQ4{Xyv.B
1 2 3 4 5 51Testing软件测试网uA,`pm
用${数组名[下标]} 下标是从0开始 下标是:*或者@ 得到整个数组内容51Testing软件测试网mG8z.X"f9f4Dl
[chengmo@centos5 ~]$ a[1]=100
/v8J,t1eC0[chengmo@centos5 ~]$ echo ${a[*]}
K8T(P!v+W#RK-wkL01 100 3 4 551Testing软件测试网+y l9K*ex}w'xxD
[chengmo@centos5 ~]$ a[5]=100 51Testing软件测试网?`&cR2?"KJMF#R
[chengmo@centos5 ~]$ echo ${a[*]}51Testing软件测试网6k
W
q7y hm)IN"zZ
1 100 3 4 5 100
xWQ,~6s Z8m+J@0直接通过 数组名[下标] 就可以对其进行引用赋值,如果下标不存在,自动添加新一个数组元素51Testing软件测试网 b'rL8d#UW%n'w*p
[chengmo@centos5 ~]$ a=(1 2 3 4 5)
g&v&][ wG)c-R0[chengmo@centos5 ~]$ unset a
9]|J?|n+PB\0[chengmo@centos5 ~]$ echo ${a[*]}51Testing软件测试网Y%D1Q/|B1`
[chengmo@centos5 ~]$ a=(1 2 3 4 5)51Testing软件测试网+D]
v9ps(y
W
[chengmo@centos5 ~]$ unset a[1] 51Testing软件测试网[W2c'DjB1{5k
[chengmo@centos5 ~]$ echo ${a[*]} 51Testing软件测试网o$tvUw
1 3 4 551Testing软件测试网 {1Y_0Pa3L
[chengmo@centos5 ~]$ echo ${#a[*]}51Testing软件测试网:V;oD
m0^0k2I/Y
451Testing软件测试网@V!iA)F]u
直接通过:unset 数组[下标] 可以清除相应的元素,不带下标,清除整个数据。
/l.Fb?.U$@c+~+h@-n0
3.特殊使用51Testing软件测试网FUd)D"r7T'Ov
[chengmo@centos5 ~]$ a=(1 2 3 4 5)
~m{/A9STD0[chengmo@centos5 ~]$ echo ${a[@]:0:3}
'm&Zgy4z01 2 351Testing软件测试网[%v5wq/r3X!k
[chengmo@centos5 ~]$ echo ${a[@]:1:4}51Testing软件测试网l3t"J.WOW
2 3 4 5
F)MKq'adf v0
[chengmo@centos5 ~]$ c=(${a[@]:1:4})51Testing软件测试网+c1K"B vv"{e
[chengmo@centos5 ~]$ echo ${#c[@]}51Testing软件测试网)oyUt3s3e}0u&S`WT
4
wcMe k
{
{ {Vqr0[chengmo@centos5 ~]$ echo ${c[*]}
E9D8~(Wf#b`"Y02 3 4 551Testing软件测试网:E3U3j%m/A9Zw
直接通过 ${数组名[@或*]:起始位置:长度} 切片原先数组,返回是字符串,中间用“空格”分开,因此如果加上”()”,将得到切片数组,上面例子:c 就是一个新数据。51Testing软件测试网f%] P{{"h
[chengmo@centos5 ~]$ a=(1 2 3 4 5) 51Testing软件测试网"H1g$R1d
e
[chengmo@centos5 ~]$ echo ${a[@]/3/100}
mCy$hIs[2aR01 2 100 4 551Testing软件测试网]I}B3@@`
[chengmo@centos5 ~]$ echo ${a[@]}
#^B8O:Ot8l01 2 3 4 5
.|lb"q9W_i0[chengmo@centos5 ~]$ a=(${a[@]/3/100}) 51Testing软件测试网o"`U
M L,G
[chengmo@centos5 ~]$ echo ${a[@]} 51Testing软件测试网d+h"b8v:H:Wv
1 2 100 4 5
AA1x;B7{]
]0
调用方法是:${数组名[@或*]/查找字符/替换字符} 该操作不会改变原先数组内容,如果需要修改,可以看上面例子,重新定义数据。51Testing软件测试网3V$h0qC Q
y!d|
51Testing软件测试网q|
h$P|GW p
从上面讲到的,大家可以发现linux shell 的数组已经很强大了,常见的操作已经绰绰有余了。51Testing软件测试网y5y f"x[\ J
转载http://www.cnblogs.com/chengmo/archive/2010/09/30/1839632.html
5{P1GLc,Q9N{0shell 按行读取并保存成数组51Testing软件测试网(?8C2G8\/o@V/fJ#W
从ip.txt里读取IP.然后把IP地址赋值到一个数组里.51Testing软件测试网+B(X?gi
IP文件如下:51Testing软件测试网~ |tt!oKH
Address: 220.181.26.163
'k(PNr4Ngf$XT0Address: 220.181.26.17451Testing软件测试网9DC+dR(Q\
Address: 220.181.26.175
p$fN&tb`n0Address: 220.181.26.17651Testing软件测试网T
m!\&I"\s&l d
e
Address: 220.181.19.228
d8uZ;EV-\d0Address: 220.181.19.22951Testing软件测试网L'a
Sx,H%})j&bz2DA
Address: 220.181.26.16151Testing软件测试网7OpvUl
u
l
Address: 220.181.26.162
PvZ)y;W0fm0方法一:51Testing软件测试网;m2r4Qz0Ui7TwW
for x in ` awk '{print $2}' ip.txt `
g0}'nI*B f
W9~0{
$^,h@_o Q3]D0echo $x51Testing软件测试网;e5@
p0nc$GR0I
}
^%]/k)_H _1W1A \2@0方法二:
9t.p'{Po:h0ARRAY=($(awk '{print $2}' ip.txt))51Testing软件测试网c[B9fI"\,B+l
方法三:
*P0t,|/n'~4l
h0n=0;while read a b;do array[$n]=$b;((n++));done<ip.txt51Testing软件测试网o(hMgV6jE
方法四:51Testing软件测试网,E
w|"oZ&tr$U ]'D
n=1
'[2`ZX;Ga1N
MI2B0while ((n<=$(cat ip.txt|wc -l)))51Testing软件测试网"c6_$gXF2EW
do
f9_ViI.\#FgE0 ipaddr[$n]=$(cat ip.txt|sed -n "${n}p"|awk '{print $2}')
5]Tq5kK3F6T0 ((n+=1))51Testing软件测试网z5ry9M7o3[
done51Testing软件测试网b7@P;Hg;O%u
n=`expr $n - 1`
1T)@(K b2S&Fl|0