我正在尝试从csv文件中获取一个列并在while循环中ping每一行 但每次它只显示ping:未知主机(网站)
#!/bin/bash
while IFS=, read num ip; do
echo $num
ping -c 10 $ip
done <site.csv
csv文件的格式为
1, facebook.com
2, google.com
结果将永远是
ping: unknown host facebook.com
ping: unknown host google.com
但是当我直接ping网站时,它实际上正在运行,所以我认为不是网络问题
-bash-4.1$ ping -c 2 facebook.com
PING facebook.com (173.252.120.6) 56(84) bytes of data.
64 bytes from edge-star-shv-12-frc3.facebook.com (173.252.120.6): icmp_seq=1 ttl=70 time=94.1 ms
64 bytes from edge-star-shv-12-frc3.facebook.com (173.252.120.6): icmp_seq=2 ttl=70 time=93.8 ms
--- facebook.com ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1094ms
rtt min/avg/max/mdev = 93.882/94.040/94.199/0.345 ms
是while循环还是从csv读取导致问题的列?
有没有办法使用wile循环从csv文件读取网站并ping它?
答案 0 :(得分:0)
跟随Glenn Jackman的建议,问题是DOS行结尾,这是一种确保从输入中删除它们的简单方法。替换:
while IFS=, read num ip; do
使用:
while IFS=$',\r' read num ip; do
通过将\r
添加到IFS
,这使得shell将DOS字符视为字段分隔符。这意味着它不会成为ip
的一部分。