将一个文本文件“cat”到另一个文本文件后,bash脚本出错

将一个文本文件“cat”到另一个文本文件后,bash脚本出错

我制作了一个非常简单的脚本 ( 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

相关内容