>我目前正在使用 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 个项目,然后对数组中的其他项目使用不同的命令。我看过一些内部外循环示例,但我不确定它们是否是我正在寻找的。
如果您只想遍历数组中的前六个项目,最简单的方法(如果不是稀疏)是:
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