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脚本或者应用程序里了~
<?php. if (!empty($_POST)) {. $data1 = $_POST["data1"];$data2 = $_POST["data2"];$fuhao = $_POST["fuh
test-f /etc/resolv.conf &&echo"File /etc/resolv.conf found."||echo"File /etc/resolv.conf not found."