#读配置文件初始化全局变量
while read line
do
if [ -z "$line" ]
then
continue
else
#在字符串中查找"="字符
pos=`expr index "$line" "="`
#截取子串
str=${line:0:pos}
if [ $str = "hdfs=" ]
then
#去掉配置记录的前缀
HDFS=`echo $line | sed 's/hdfs=//'`
elif [ $str = "hive=" ]
then
HIVE=`echo $line | sed 's/hive=//'`
elif [ $str = "hivePath=" ]
then
hivePath=`echo $line | sed 's/input=//'`
elif [ $str = "input=" ]
then
remotePay=`echo $line | sed 's/input=//'`
elif [ $str = "output=" ]
then
localPay=`echo $line | sed 's/output=//'`
elif [ $str = "build=" ]
then
buildList=(`echo $line | sed 's/build=//'`)
elif [ $str = "search1=" ]
then
searchList1=(`echo $line | sed 's/search1=//'`)
else
searchList2=(`echo $line | sed 's/search2=//'`)
fi
fi
done < $config
上面脚本处理的配置文件如下:
hdfs=hdfs://hdpnn.cm3:9000
hive=hive -u root -p root -e
input=/group/input
output=/group/output
build=search71d.cm3 search40c.cm3 search43c.cm3
search1=search40d.cm3 search41d.cm3 search42d.cm3
search2=search43d.cm3 search44d.cm3 search45d.cm3
总结一下shell数组的使用方法吧。
1、初始化数组,元素之间只能用空格分隔。
arr=(1 2 3 4)
2、取数组元素,通过下标访问。
let i=0
${arr[$i]}
3、插入数据
arr[6]=8
数组将变成(1 2 3 4 8),shell数组其实有点map的感觉,这个’8′只能通过${arr[6]}得到。
4、取数组长度和元素长度。
$arr[@]表示数组所有的元素,加上#表示长度,所以下面len为数组中元素的个数。
len=${#arr[@]}
还可以获得某个元素的长度,只需将’@'替换成该元素的下标就好了,如下所示:
len=${#arr[3]}
5、遍历数组
for a in ${arr[@]}
do
#do something
done
还有几点要注意的。因为shell的类型比较乱。shell不支持export一个数组,所以只能将其作为一
个字符串来export,使用${arr[0]}可以得到字符串的所有内容。如果在子脚本中需要遍历该数
组,使用下面两种方法都可以:
for e in ${arr[@]}
do
#do something
done
#第二种方法应该是更正确的方法
for e in arr
do
#do something
done
如果有几个数组,可以象下面这样遍历之:
for server in ${rank1[@]} ${rank2[@]} ${rank3[@]}
do
#do something
done
网友评论