您可以在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脚本实现此目的?
答案 0 :(得分:0)
一个Bash解决方案是使用Bash数组,Indirect References和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循环来完成你所要求的。