2016-09-26 3 views
0

my question私はループを使用することを学び、最終的にソフトウェアのマルチインスタンスのインストールスクリプトを手助けします。ありがとうございます:)シェルを複数変数付きのループのために

私はsedを使って設定ファイルを自動セットアップしようとしています。このために私はループ内に多変数を必要とします。私は

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 

システムから私のスクリプトをIP-なアドレスはおよびIPの(PTR)のためのホスト名を読み

は知っている、3 IPのは、そこにAR、IP-アドレスとホスト名を知っています。

IP(3)の番号は現在私の001 002 003です。これはうまく動作しています。

私がsedで設定ファイルを編集したいのなら、これを行うには3つの変数が必要です。

コマンド私の場合anyname-001 -some-parameterはパスへのコピーです。私のパスは、私は3 IP-アドレスと3も必要SED使用することによっては、/ etc/anyname-003今

の/ etc/anyname-001であると/ etc/anyname-003

ホスト名。

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

どのようにすれば、すべての変数を同時にループすることができますか?多くのことを試してください。私は、ネストされたループを見つけたが、それは

001 >> IP機能しません:AAAA >>ホスト名aaa.aaa.aa

002 >> IP:BBBB >>ホスト名

bbb.bbb.bb

を003 >> IP:CCCC >>ホスト名ccc.ccc.cc

、あなたは彼らをループすることができ、あなたの配列のホスト名とIPADDRの両方の長さが同じであると仮定すると、あなたに

+0

:だから、全体的なコードは何かのようになります

echo ${#HOSTNAME[@]} 

実際に話題になっている質問があるかもしれませんが、今はちょっと埋まっていて、他の誰かが再現できないことが考えられます(コードを実行するためには同じDNS設定のシステムが必要ですおよびIPアドレス)。この問題は、その重複が助けにならないため閉鎖されている場合は、[最小限の、完全で証明可能な例](http://stackoverflow.com/help/mcve) - コードを作成してみてください。同じIP /ホスト/インタフェース構成を持たなくても問題はありません。 –

+0

他の人が回答をテストできるように質問を書き直す方法がわからない場合は、ホスト名やIPアドレスなどとは関係のない基本的なbash質問のテストケースを作成することを検討してください。結局のところ、 'for 'ループを実行する方法はたくさんあります。そうすることで、bash-languageの質問は、部分的にしか記述していないより大きな文脈から分離することで、はっきりと分かりやすくなります。あなたがこのような書き直しをすると、私に知らせるようになります。 –

答えて

0

ありがとうございました1回の実行でインデックスを介した要素

配列の長さは、次のように、たとえば、配列変数に「#」を使用して計算される:それは

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

あなたが最初にそれを理解する必要があります。いったん実行すると、上記のコードは少なくとも1つのループ内で複数の配列を繰り返し処理する方法の例を示します。 – sal

関連する問題