我尝试使用bash脚本创建F5命令,该脚本循环执行两个序列声明,一个用于IP地址,另一个用于VLAN,然后我在最后连接。
#!/bin/bash
vlan_seq=$(seq 1010 1010;seq 1012 1024;seq 1054 1054;seq 1146 1161)
ip_seq=$(seq 10 10;seq 12 24;seq 54 54;seq 146 161)
for i in $ip_seq; do
ip_part=$(echo net self 10.189.${i}.1 "{" address 10.189.${i}.1/24)
done
for e in $vlan_seq; do
vlan_part=$(echo floating enabled traffic-group traffic-group-1 unit 1 vlan
vlan_${e}_int_compute "}")
done
echo ${ip_part} ${vlan_part}
这似乎有效,但我只是得到了最后的结果,而且我对如何解决这个问题感到有些困惑。我应该循环以获得所有结果?
net self 10.189.161.1 {address 10.189.161.1/24 floating enabled traffic-group traffic-group-1 unit 1 vlan vlan_1161_int_compute}
答案 0 :(得分:1)
你真的需要两个序列吗?看起来vlan_seq
中的条目比ip_seq
中的相应条目多1000个。
因此我们可以为每个$i
计算它:
#!/bin/bash
format=$(printf '%s\\n' \
'self 10.189.%d.1 { address 10.189.%d.1/24' \
' floating enabled' \
' traffic-group traffic-group-1' \
' unit 1' \
' vlan vlan_%d_int_compute' \
'}')
ip_seq=(10 {12..24} 54 {164..161})
for i in ${ip_seq[@]}; do
printf "$format" $i $i $((1000+i))
done
答案 1 :(得分:0)
管理以找到更好的方法:
#!/bin/bash
vlan_seq=($(seq 1010 1010;seq 1012 1024;seq 1054 1054;seq 1146 1161))
ip_seq=($(seq 10 10;seq 12 24;seq 54 54;seq 146 161))
for ((i=0;i<${#ip_seq[@]};++i)); do
printf "net self 10.189.%s.1 { address 10.189.%s.1/24 floating enabled traffic-group traffic-group-1 unit 1 vlan vlan_%s_int_compute }\n"
"${ip_seq[i]}" "${ip_seq[i]}" "${vlan_seq[i]}"
done