Shell脚本显示额外的括号

时间:2013-11-05 15:57:40

标签: bash shell scripting nfs kvm

我是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

我正在尝试克隆虚拟机并更改主机文件中的条目

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

for遍历所有单词,例如:

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

所以它永远不会奏效。使用其他方法循环,​​例如seq 1 3