我目前正在使用for循环,如下所示:
for server in "${servers[@]}"; do
if nc -v -z -w1 ${server} 3389 2>/dev/null; then
xfreerdp /u:$username /p:$pass /t:"$1""-""${server}" /w:$width /h:$height +cert-ignore +wm-class:xfree +unmap-buttons +window-drag +fonts +clipboard -grab-keyboard /sec:nla /v:${server} > /dev/null 2>&1 &
else echo "No connection to "${server}""
fi
done
然而,当上述阵列达到6个以上时,这将填满我的屏幕。所以我想要完成的是使用for循环直到它到达第6项,然后对我的数组中的其他项使用不同的命令。我已经看到了一些内部外循环示例,但我不确定它们是否是我正在寻找的。 p>
答案 0 :(得分:4)
如果您只想遍历数组中的前六项,那么最简单的方法(如果它不是稀疏的)就是:
for server in "${servers[@]:0:6}"; do
...之后您可以使用"${servers[@]:6}"
参考剩余的项目。
如果您做想要优雅地处理稀疏数组,您可以考虑按索引进行迭代(这样您就可以从中断的地方继续)并使用计数器:
i=0
for server_idx in "${!servers[@]}"; do
(( ++i > 6 )) && break
server=${servers[$server_idx]}
: "other contents here"
done
# the last index already processed is left in $server_idx
顺便说一句,您可能考虑的方法是暂停每六次循环迭代:
idx=0
for server in "${servers[@]}"; do
if (( ++idx % 0 == 0 )); then
echo "Waiting for background jobs to complete..." >&2
wait
echo "...background jobs finished, press enter to continue:" >&2
read _ </dev/tty
fi
xfreerdp ... &
done