0

シェルスクリプト初心者です

echo $ip  "node$i" >> /etc/hosts

上記をシェルで書くと、

192.168.1.2 {
192.168.1.4 node2
192.168.1.2 }

{ と } は必要ありません。どうすればよいですか?

完全なプログラム

read total 
number=virsh list --all |  wc -l
$number=$number+1
for i in {$number $total }
do 
virt-clone --connect=qemu:///system -o vm2 -n vm$i -f /vm$i.qcow2

ip=$(arp -an |grep "virbr0" |egrep -Eo '[[:digit:]]{1,3}\.[[:digit:]]{1,3}\. [[:digit:]]   {1,3}\.[[:digit:]]{1,3}'|tail --lines=1)
echo $ip  "node$i" >> /etc/hosts
done

VM のクローンを作成し、hosts ファイルのエントリを変更しようとしています

4

2 に答える 2

1

構文が間違っています。number=1としましょうtotal=3。それで

for i in {$number $total }
do 

3回繰り返します。変数iは、連続して値に設定されます

  • {1
  • 3
  • }

ブレース展開を使用iして 1、次に 2、次に 3 に設定しようとしているようです。

for i in {$number..$total}
do

bashでは、パラメータ展開の前にブレース展開が行われるため、それも機能しません。(評価プロセスがより複雑なため、これは で機能することに注意してください。) 変数で定義された範囲では、コマンドzshを使用する必要があります。seq

for i in $(seq $number $total)
do

またはCスタイルのループ

for (( i=$number; i<=$total; i++ ))
do
于 2013-11-05T16:24:12.283 に答える
0

forすべての単語をループします。例:

for i in {1 3 }; do echo $i; done
{1
3
}

したがって、それは決して機能しません。他の方法を使用してループしますseq 1 3

于 2013-11-05T16:09:54.290 に答える