我是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
我正在尝试克隆虚拟机并更改主机文件中的条目
答案 0 :(得分:1)
你的语法错了。我们说number=1
和total=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
答案 1 :(得分:0)
for
遍历所有单词,例如:
for i in {1 3 }; do echo $i; done
{1
3
}
所以它永远不会奏效。使用其他方法循环,例如seq 1 3
。