我制作了一个非常简单的脚本 ( ping_hostnames.sh
) 来遍历文件中的 IP/主机名列表hostnames.txt
并对它们执行 ping 操作:
#!/bin/bash
hostnameCount=`cat hostnames.txt | wc -l`
i=1
while [ $i -le $hostnameCount ]
do
ping -c 3 $(sed -n ${i}p hostnames.txt)
i=$(( i+1 ))
done
然后我这样做:
cat file_with_ip_list.txt >> hostnames.txt
现在hostnames.txt
看起来像:
192.168.1.0
192.168.1.1
192.168.1.2
192.168.1.3
然后运行脚本(./ping_hostnames.sh
)出现错误:
: Name or service not known
file_with_ip_list.txt
但是,如果我使用文本编辑器手动复制/粘贴数据hostnames.txt
,它就可以正常工作。是否正在进行某种类型转换cat
或其他什么?
答案1
@steeldriver 在评论中回答了它:“看不见的”CRLF 行结尾导致了这个问题,现在我知道了,我可以使用许多解决方法来解决这个问题。另外,感谢评论中帮助我改进代码的其他人!虽然我不是 BASH 的完全新手,但我仍然有很多东西需要学习!
答案2
看看这是否适用于 hostname.txt。可能是wc -l
把行数减一或类似的东西。
for f in $(cat hostnames.txt); do ping -c 3 ${f}; done