2016-09-26 56 views
0

my question我學會使用循環,並與您一起幫助我最後一個軟件的多個實例的安裝腳本。非常感謝:)殼用於循環與多變量

現在我嘗試通過使用sed自動設置配置文件。爲此,我需要循環中的多變量變量。

我從系統中IP-並不會忽略對IP的(PTR)的主機名

IPADDR=`ifconfig | awk '{print $2}' | egrep -o '([0-9]+\.){3}[0-9]+'|grep -v 127.0.0.1` 
for ipaddr in ${IPADDR[@]}; do echo $ipaddr; done 
for iphost in ${IPADDR[@]}; do host $iphost |grep pointer | awk '{print $NF}' RS='.\n'; done 

我的劇本知道讀,有AR 3 IP的,知道了IP-地址和主機名。

IP(3)的號碼現在是我的001 002 003.這個運行良好。

如果我喜歡用sed編輯配置文件,我需要3變量來做到這一點。

命令anyname-001 -some -parameter在我的情況是複製到路徑。現在我的道路是

的/ etc/anyname-001,在/ etc/anyname-003和/ etc/anyname-003

使用SED我還需要3個IP-地址和3主機名。

sed -i 's/IPADDR/'${ipaddr}'/g' /etc/anyname-${number}/config.cfg 
sed -i 's/HOSTNAME/'${hostname}'/g' /etc/anyname-${number}/config.cfg 

我怎樣才能使我的循環與所有變量在同一時間。 T嘗試很多事情。我發現嵌套的循環,但它不能正常工作

001 >> IP:AAAA >>主機名aaa.aaa.aa

002 >> IP:BBBB >>主機名bbb.bbb.bb

003 >> IP:中交>>主機名ccc.ccc.cc

謝謝

+0

這是可以想象,你可能在這裏有一個問題,這實際上是在話題上,但現在它已經被埋沒了,並且絕對不能被任何人重現(因爲運行你的代碼,我們需要一個具有相同DNS配置的系統和IP地址)。如果這個問題因爲重複而關閉不起作用,請嘗試創建一個[Minimal,Complete,Verifiable Example](http://stackoverflow.com/help/mcve) - 別人可以運行的代碼來查看您的代碼問題,即使它們沒有相同的IP /主機/接口配置。 –

+0

如果你很難找出如何重寫問題以便其他人可以測試他們的答案,可以考慮嘗試爲你的基礎bash問題創建一個與主機名,IP地址等無關的測試用例 - 這裏有畢竟,有很多方法可以鍛鍊'for'循環;這樣做也可以使你的bash語言問題更加清晰,把它與你僅僅部分描述的更大的背景分開。如果你做了這樣的重寫,@注意我,我會扭轉近似的重複。 –

回答

0

假設兩者的陣列主機名的長度和IPADDR是相同的,那麼你就可以通過他們的循環元素通過索引在一次運行。

數組的長度由數組變量使用「#」,例如計算公式爲:

echo ${#HOSTNAME[@]} 

因此,總體而言你的代碼看起來像什麼:

count=${#HOSTNAME[@]} 
for ((i=0; i<${count}; i++)); 
do 
    echo ${HOSTNAME[$i]}; 
    echo ${IPADDR[$i]}; 
    ((j=i+1)); 
    sed -i 's/IPADDR/'${IPADDR[$i]}'/g' /etc/anyname-${j}/config.cfg 
    sed -i 's/HOSTNAME/'${HOSTNAME[$i]}'/g' /etc/anyname-${j}/config.cfg 
done 
+0

我想我的問題是,$ HOSTNAMES是沒有數組。裏面只有一個名字:/ – nbx

+0

然後你需要首先弄清楚。一旦你做了,上面的代碼應該工作,或者給你至少一個循環遍歷多個數組的方式的例子。 – sal