1

我有一个 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.txt
done

截至目前,这一切都是echo $f " " >> mydns.txt.

如果我使用 dig 行并替换$f命令行中的内容,我会得到预期的结果。但是,我的脚本中什么也没有。我知道该$f变量已填充,因为它$f在前一行中回显。为什么它在脚本中不起作用?

4

3 回答 3

2

单引号可防止 shell 扩展变量。您应该使用双引号:

dig ns "$f" | grep "^$f" | ...

$f请注意,我还在dig通话中使用了双引号。引用你的变量是一个好习惯;有关详细信息,请参阅this other SO question

于 2013-10-18T16:34:16.153 回答
2

你的意思是 grep '^$f' 吗?它应该是'^'"$f",即变量周围没有刻度。它不会那样扩展。

于 2013-10-18T15:08:32.790 回答
0

这可能是 Windows 风格/Unix 风格的换行问题。将换行符转换为 \n 而不是 \r\n 可能会有所帮助。

您是否尝试过dos2unix这里给出的建议:grep 在 bash 脚本中失败但在命令行上工作

于 2013-10-18T14:58:51.870 回答