Bash Array不接受WildCard

时间:2015-07-03 20:01:29

标签: linux bash networking centos redhat

我有一个我在bash脚本中设置的数组。我的目标是ping具有许多网络接口的服务器上的特定端口。例如ping -I eth3 172.26.0.1命令强制ping eth3

当我设置bash数组时,如果我单独调用Elements(端口),我可以获得代码。例如,我告诉它ping元素2或eth5

ethernet[0]='eth3'
ethernet[1]='eth4'
ethernet[2]='eth5'
ethernet[3]='eth6'

ping -c 1 -I ${ethernet[2]} 172.26.0.1

该脚本通过eth2

工作和ping
[13:49:35] shock:/dumps # bash -x ARRAY
+ ethernet[0]=eth3
+ ethernet[1]=eth4
+ ethernet[2]=eth5
+ ethernet[3]=eth6
+ ping -c 1 -I eth5 172.26.0.1
PING 172.26.0.1 (172.26.0.1) from 172.26.0.192 eth5: 56(84) bytes of data.
From 172.26.0.192 icmp_seq=1 Destination Host Unreachable

--- 172.26.0.1 ping statistics ---
1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 3001ms

但是,如果我使用通配符而不仅仅是元素2,它将在第二个元素(Eth4)上消失

ethernet[0]='eth3'
ethernet[1]='eth4'
ethernet[2]='eth5'
ethernet[3]='eth6'


ping -c 1 -I ${ethernet[*]} 172.26.0.1

[13:48:12] shock:/dumps # bash -x ARRAY
+ ethernet[0]=eth3
+ ethernet[1]=eth4
+ ethernet[2]=eth5
+ ethernet[3]=eth6
+ ping -c 1 -I eth3 eth4 eth5 eth6 172.26.0.1
ping: unknown host eth4

关于为什么通配符在数组中的第二个元素上死亡的任何想法?我是脚本新手,我只是想尝试使用我从本文中学到的东西并将其应用到一个有用的网络脚本中。谢谢

http://www.thegeekstuff.com/2010/06/bash-array-tutorial/

编辑 - 我不知道为什么我对这个问题投了反对票。请告知

2 个答案:

答案 0 :(得分:4)

-I选项只接受一个接口;你需要遍历数组:

for ifc in "${ethernet[@]}"; do
    ping -c 1 -I "$ifc" 172.26.0.1
done

答案 1 :(得分:3)

使用xargs:

printf "%s\n" "${ethernet[@]}" | xargs -I {} ping -c 1 -I {} 172.26.0.1