我是shell脚本的初学者
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
我正在尝试克隆虚拟机并更改主机文件中的条目
你的语法是错误的。假设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
for
遍历所有单词,例如:
for i in {1 3 }; do echo $i; done
{1
3
}
所以它永远不会起作用。使用其他方法进行循环,例如 seq 1 3
.