#讀配置文件初始化全局變量
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
總結(jié)一下shell數(shù)組的使用方法吧。
1、初始化數(shù)組,元素之間只能用空格分隔。
arr=(1 2 3 4)
2、取數(shù)組元素,通過下標(biāo)訪問。
let i=0
${arr[$i]}
3、插入數(shù)據(jù)
arr[6]=8
數(shù)組將變成(1 2 3 4 8),shell數(shù)組其實(shí)有點(diǎn)map的感覺,這個(gè)’8′只能通過${arr[6]}得到。
4、取數(shù)組長(zhǎng)度和元素長(zhǎng)度。
$arr[@]表示數(shù)組所有的元素,加上#表示長(zhǎng)度,所以下面len為數(shù)組中元素的個(gè)數(shù)。
len=${#arr[@]}
還可以獲得某個(gè)元素的長(zhǎng)度,只需將’@'替換成該元素的下標(biāo)就好了,如下所示:
len=${#arr[3]}
5、遍歷數(shù)組
for a in ${arr[@]}
do
????#do something
done
還有幾點(diǎn)要注意的。因?yàn)閟hell的類型比較亂。shell不支持export一個(gè)數(shù)組,所以只能將其作為一
個(gè)字符串來export,使用${arr[0]}可以得到字符串的所有內(nèi)容。如果在子腳本中需要遍歷該數(shù)
組,使用下面兩種方法都可以:
for e in ${arr[@]}
do
????#do something
done
#第二種方法應(yīng)該是更正確的方法
for e in arr
do
????#do something
done
如果有幾個(gè)數(shù)組,可以象下面這樣遍歷之:
for server in ${rank1[@]} ${rank2[@]} ${rank3[@]}
do
????#do something
done