我有一个网络服务器,其中包含一堆具有不同名称服务器的域名,我正在尝试清理这些混乱。我正在尝试获取域名及其名称服务器的列表。我已经编写了这个简单的脚本,它几乎可以工作:
#!/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
。
如果我使用挖掘线并替换$f
应该在命令行中的内容,我会得到预期的结果。但是,我的脚本中没有任何内容。我知道$f
变量已填充,因为它在前一行中回显$f
。为什么它在脚本中不起作用?
答案 0 :(得分:2)
答案 1 :(得分:2)
单引号可防止shell扩展变量。你应该使用双引号:
dig ns "$f" | grep "^$f" | ...
请注意,我在$f
调用中的dig
周围使用了双引号。引用你的变量是很好的做法;有关详细信息,请参阅this other SO question。
答案 2 :(得分:0)
它可能是Windows风格/ Unix风格的换行问题。将换行符转换为\ n而不是\ r \ n。
可能会有所帮助您是否尝试过此处提出的dos2unix
建议:grep fails inside bash script but works on command line?