我使用此脚本在我的ESXI 6.5中复制虚拟机。脚本的第一个参数是要复制的目录的名称。
我想要第二个参数,这就是我要复制的vms的数量。现在,我需要在每次要复制不同数量的vms时修改for循环。下面的脚本通过复制作为第一个脚本参数给出的vm的目录来创建20个vms。我像这样运行它:./copy.sh CentOS1
但是希望有这样的东西:./copy.sh CentOS1 x
其中x是我的for循环中的结束条件。
#!/bin/sh
for i in $(seq 1 1 20)
do
mkdir ./$1_$i/
cp $1/* $1_$i/
echo "Copying machine '$1_$i' ... DONE!"
done
注意:请不要为其他解决方案提供建议,例如:https://www.cyberciti.biz/faq/bash-for-loop/,因为我检查了它们并且它们没有工作。
感谢。
答案 0 :(得分:2)
如果您使用的是for
,请使用C风格的bash
循环。
for ((i=1; i<=$2; i++))
do
mkdir "./$1_$i/"
cp "$1"/* "$1_$i/"
echo "Copying machine '$1_$i' ... DONE!"
done
如果您需要POSIX兼容性(正如您的shebang所暗示的那样),那么您可能无法依赖seq
可用;使用while
循环。
i=1
while [ "$i" -le "$2" ]; do
mkdir ./"$1_$i"
cp "$1"/* "$1_$i"
i=$((i+1))
done
答案 1 :(得分:1)
尽管您提出了相反的抗议,但您链接中的解决方案之一可以正常运行:
for ((i=1; i<=$2; i++)); do
# body of loop goes here
done
将从1循环到第二个参数中给出的数字