0

我是 shell 脚本的初学者

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

在 shell 中编写以上内容会导致

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 并更改主机文件中的条目

4

2 回答 2

1

你的语法是错误的。让我们说number=1total=3。然后

for i in {$number $total }
do 

将迭代三次。变量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 回答