bash脚本 - 在for循环中同时迭代两个(或更多)范围

时间:2015-12-11 21:20:34

标签: bash

我知道可以迭代bash中的几个数组for循环或任何命令,如echo(Brace Expansion)。

for i in {1..4} {a..d}
    echo $i

# or
echo {1..4} {a..d}

# output: 1 2 3 4 a b c d

但是有可能同时迭代数组以得到如下结果:

# output: 1 a 2 b 3 c 4 d

例如,我需要ssh到三个服务器范围,服务器名称为server-a1.com,server-b1.com,server-c1.com,并且需要在所有第一次上执行操作,而不是在所有秒钟上执行操作等等

4 个答案:

答案 0 :(得分:2)

您可以使用

生成所有组合
echo {1..4}{a..d}

如果你选择每五分之一,你就会得到你想要的东西:

all=({1..4}{a..d})
for (( i=0 ; i<${#all[@]} ; i++ )) ; do
    (( !(i % 5) )) && echo ${all[i]}
done

答案 1 :(得分:1)

c:\program files\microsoft visual studio 2015
#!/bin/bash
a=({1..4})    b=({a..d})    i=0                ### Initial values

for ((i=0; i<4; i++ )) ; do                    ### Loop over elements
      printf '%s %s    ' "${a[i]}" "${b[i]}"   ### Print pairs of values.
done
echo

答案 2 :(得分:0)

确定

 for i in {1..4} ; do
    for j in {a..d} ; do
       echo ssh  user@server-${i}${j}.com 'cmd'
    done
 done

<强>输出

ssh user@server-1a.com cmd
ssh user@server-1b.com cmd
ssh user@server-1c.com cmd
ssh user@server-1d.com cmd
ssh user@server-2a.com cmd
ssh user@server-2b.com cmd
ssh user@server-2c.com cmd
. . .

当然,您可以在需要时使用ssh${i}创建自己的${j} cmdline。

我已使用echo ssh ...作为您实际流程的占位符。

IHTH

答案 3 :(得分:0)

这将做你想要的:

a=( {1..4} )
b=( {a..d} )
for (( i=0; i<${#a[@]}; i++ )); do
    echo -n "${a[i]} ${b[i]} "
done

范围扩展分为两个数组。第一个数组的索引用于表示两个数组。