shell數(shù)組使用

#讀配置文件初始化全局變量

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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容