[英]shell script to accept multiple sets of arrays in for loop
嗨,有人可以在shell脚本上帮我吗?
我有2台主机和4台服务器,我想通过使用for循环
host1 --> host1_server1 host1_server2
host2 --> host2_server1 host2_server2
我想使用for
循环打印两个集合,输出两个集合:
设置1个输出
hostname : host1 servers: host1_server1
hostname : host1 servers: host1_server2
设置2输出
hostname : host2 servers: host2_server1
hostname : host2 servers: host2_server2
如何使用Bash Shell脚本实现此目标?
一种Bash解决方案是使用Bash数组, 间接引用和printf
。
#!/bin/bash
declare -a hosts=(host1 host2) # array of variable names; quoting not needed
declare -a host1=("host1_server1" "host1_server2")
declare -a host2=("as-host2_server1" "as-host2_server2")
for Host in "${hosts[@]}"; do
Indirect="$Host[@]"
printf "hostname : $Host servers: %s\n" "${!Indirect}"
done
上面产生了以下输出:
hostname : host1 servers: host1_server1
hostname : host1 servers: host1_server2
hostname : host2 servers: as-host2_server1
hostname : host2 servers: as-host2_server2
此解决方案还利用了printf
命令的行为来重用格式以使用所有参数。 在man bash
,请参见printf
部分:
该格式可根据需要重新使用以消耗所有参数
有趣的是,请注意Bash习惯用法"${Variable[@]}"
保留数组元素内的所有空格。 同样,如果数组中没有元素,则该惯用法扩展为空。 这在许多情况下非常有用。
这些方法结合在一起,可以实现一个for循环来完成您所要求的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.