bash数组> for循环直到x项

时间:2017-01-11 21:26:33

标签: arrays bash loops for-loop

我目前正在使用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项,然后对我的数组中的其他项使用不同的命令。我已经看到了一些内部外循环示例,但我不确定它们是否是我正在寻找的。

1 个答案:

答案 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