Bash cli和脚本中的grep行为不同
我有一个web服务器,它有一堆不同名称的域服务器,我正在努力清理这些混乱。我正在尝试获取域及其名称服务器的列表。我已经编写了这个简单的脚本,它几乎可以工作:Bash cli和脚本中的grep行为不同,bash,grep,Bash,Grep,我有一个web服务器,它有一堆不同名称的域服务器,我正在努力清理这些混乱。我正在尝试获取域及其名称服务器的列表。我已经编写了这个简单的脚本,它几乎可以工作: #!/bin/bash for f in `cat mydomains.txt` do echo $f " " >> mydns.txt dig ns $f | grep '^$f' | cut -d $'\t' -f 5 >> mydns.txt echo "" >> mydns
#!/bin/bash
for f in `cat mydomains.txt`
do
echo $f " " >> mydns.txt
dig ns $f | grep '^$f' | cut -d $'\t' -f 5 >> mydns.txt
echo "" >> mydns.txt
done
到目前为止,所有这些操作都是echo$f”“>>mydns.txt
如果我使用dig行并替换命令行中应该出现的
$f
,我将得到预期的结果。然而,我的剧本里什么都没有。我知道填充了$f
变量,因为它回显前一行中的$f
。为什么它不能在脚本中工作?可能是Windows风格/Unix风格的换行符问题。将换行符转换为\n而不是\r\n可能会有所帮助
您是否尝试过此处给出的
dos2unix
建议:?可能是Windows风格/Unix风格的换行符问题。将换行符转换为\n而不是\r\n可能会有所帮助
您是否尝试过此处给出的
dos2unix
建议:?您的意思是grep for“^$f”?它应该是“^'”$f”,即在变量周围没有记号。它不会以这种方式扩展。您的意思是对“^$f”进行grep吗?它应该是“^'”$f”,即在变量周围没有记号。它不会以这种方式展开。单引号阻止shell展开变量。您应该使用双引号:
dig ns "$f" | grep "^$f" | ...
注意,在
dig
调用中,我还在$f
周围使用了双引号。引用你的变量是很好的做法;有关详细信息,请参阅 单引号阻止shell扩展变量。您应该使用双引号:
dig ns "$f" | grep "^$f" | ...
注意,在
dig
调用中,我还在$f
周围使用了双引号。引用你的变量是很好的做法;有关详细信息,请参阅 这些文件是在Linux中创建的,并且仅存在于Linux中。没有Windows换行符。在Linux上创建并不一定意味着文本编辑器不使用CRLF换行符。不过,我很高兴你找到了解决问题的办法这些文件是在Linux中创建的,并且仅存在于Linux中。没有Windows换行符。在Linux上创建并不一定意味着文本编辑器不使用CRLF换行符。不过,我很高兴你找到了解决问题的办法就这样!非常感谢,就这样!多谢各位。