Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
bash脚本-在for循环中同时迭代两个(或多个)范围_Bash - Fatal编程技术网

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

bash脚本-在for循环中同时迭代两个(或多个)范围,bash,Bash,我知道可以在bashfor循环或任何类似echo()的命令中迭代几个数组 但是否可以同时迭代数组以获得如下结果: # output: 1 a 2 b 3 c 4 d 例如,我需要通过ssh连接到三个服务器范围,名称分别为server-a1.com、server-b1.com、server-c1.com,并且需要在所有第一个服务器上执行操作,而不是在所有第二个服务器上执行操作,依此类推。当然 for i in {1..4} ; do for j in {a..d} ; do

我知道可以在
bash
for循环或任何类似echo()的命令中迭代几个数组

但是否可以同时迭代数组以获得如下结果:

# output: 1 a 2 b 3 c 4 d
例如,我需要通过ssh连接到三个服务器范围,名称分别为server-a1.com、server-b1.com、server-c1.com,并且需要在所有第一个服务器上执行操作,而不是在所有第二个服务器上执行操作,依此类推。

当然

 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
. . .
当然,您可以在需要时使用
${i}
${j}
创建自己的
ssh
cmdline

我使用了
echosh…
作为实际进程的占位符

当然可以

 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
. . .
当然,您可以在需要时使用
${i}
${j}
创建自己的
ssh
cmdline

我使用了
echosh…
作为实际进程的占位符


IHTH

您可以使用

echo {1..4}{a..d}
如果您选择每五分之一,您将得到您想要的:

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

对于((i=0;i您可以使用

echo {1..4}{a..d}
如果您选择每五分之一,您将得到您想要的:

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

对于((i=0;i这将满足您的要求:

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

对于((i=0;i这将满足您的要求:

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

为了((i=0;iI将
1A2B3C
表示为
仅第一个,仅第二个,依此类推
而不是
所有第一个,然后是所有第二个,依此类推
i将
1A2B3C表示为
仅第一个,仅第二个,依此类推
而不是
所有第一个,然后是所有秒等等
Innovative&cool;)是否可以用计算值而不是5来概括它,这样脚本将适用于
{1..5}{a..e}
{1..6}{a..f}
等等?@sjsam:如果两个列表的大小相同,您可以使用大小+1,或者
bc谢谢并感谢:)Innovative&cool;)有没有可能用一个计算值而不是5来概括它,这样脚本就可以用于
{1..5}{a..e}
{1..6}{a..f}
等等?@sjsam:如果两个列表的大小相同,您可以使用size+1,或者
bc谢谢并感谢:)这不是我对上述问题最后一行的解释:“例如,我需要通过ssh连接到三个服务器,它们的名称分别为server-a1.com、server-b1.com、server-c1.com,并且需要在所有第一个服务器上执行操作,而不是在所有第二个服务器上执行操作,以此类推。”。由于O.P.从未对提供的任何答案做出响应,因此我不认为有任何理由采取进一步行动。请随意编写您自己的答案;-)祝大家好运!但是,是的,我的顺序o
a1
vs
1a
错了。很明显如何解决这个问题,所以我将保持原样。感谢您的关注!我不是这样解释上面问题的最后一行的:例如,我需要通过ssh连接到三个服务器,它们的名称分别为server-a1.com、server-b1.com、server-c1.com,并且需要在所有第一个服务器上执行操作,而不是在所有第二个服务器上执行操作,以此类推。”。由于O.P.从未对提供的任何答案做出响应,因此我不认为有任何理由采取进一步行动。请随意编写您自己的答案;-)祝大家好运!但是是的,我的订单o
a1
vs
1a
错了。很明显如何解决这个问题,所以我将保持原样。谢谢您的关注!