我知道可以迭代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,并且需要在所有第一次上执行操作,而不是在所有秒钟上执行操作等等
答案 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
范围扩展分为两个数组。第一个数组的索引用于表示两个数组。