Unix脚本,尝试主机,得到“013 not found:3(NXDOMAIN)”

时间:2009-07-13 07:13:56

标签: unix shell

我有一个文本文件,a.txt。内容如下:

$ cat a.txt
microsoft.com
google.com
ibm.com

我正在尝试在每一行上运行一个主机命令来获取IP地址。这是我的剧本:

#!/bin/sh
for i in `cat a.txt`
do
echo $i
host $i
done

当我运行它时,我得到了这个:

$ ./a.sh
microsoft.com
Host microsoft.com\013 not found: 3(NXDOMAIN)
google.com
Host google.com\013 not found: 3(NXDOMAIN)
ibm.com
Host ibm.com\013 not found: 3(NXDOMAIN)

但是,如果在编辑我的脚本时明确指定主机:

#!/bin/sh
host microsoft.com
host google.com
host ibm.com

有效。

你知道我得到“013 not found:3(NXDOMAIN)”?

由于 克里斯

2 个答案:

答案 0 :(得分:3)

你的文件中有一些有趣的字符(在每一行的末尾)。做:

od -xcb a.txt

并在此处发布结果。该文件可能来自另一个系统(DOS / Windows),尽管\ 013是VT字符而不是CR。

当我对从头创建的文件做同样的事情时,我得到:

pax@pax-desktop:~$ . ./a.sh
microsoft.com
microsoft.com has address 207.46.197.32
microsoft.com has address 207.46.232.182
microsoft.com mail is handled by 10 mail.messaging.microsoft.com.
google.com
google.com has address 74.125.45.100
google.com has address 74.125.67.100
google.com has address 74.125.127.100
google.com mail is handled by 10 smtp2.google.com.
google.com mail is handled by 10 smtp3.google.com.
google.com mail is handled by 10 smtp4.google.com.
google.com mail is handled by 10 smtp1.google.com.
ibm.com
ibm.com has address 129.42.16.103
ibm.com has address 129.42.17.103
ibm.com has address 129.42.18.103
ibm.com mail is handled by 10 e4.ny.us.ibm.com.
ibm.com mail is handled by 10 e5.ny.us.ibm.com.
ibm.com mail is handled by 10 e6.ny.us.ibm.com.
ibm.com mail is handled by 10 e31.co.us.ibm.com.
ibm.com mail is handled by 10 e32.co.us.ibm.com.
ibm.com mail is handled by 10 e33.co.us.ibm.com.
ibm.com mail is handled by 10 e34.co.us.ibm.com.
ibm.com mail is handled by 10 e35.co.us.ibm.com.
ibm.com mail is handled by 10 e1.ny.us.ibm.com.
ibm.com mail is handled by 10 e2.ny.us.ibm.com.
ibm.com mail is handled by 10 e3.ny.us.ibm.com.

我的od输出为:

0000000 696d 7263 736f 666f 2e74 6f63 0a6d 6f67
          m   i   c   r   o   s   o   f   t   .   c   o   m  \n   g   o
        155 151 143 162 157 163 157 146 164 056 143 157 155 012 147 157
0000020 676f 656c 632e 6d6f 690a 6d62 632e 6d6f
          o   g   l   e   .   c   o   m  \n   i   b   m   .   c   o   m
        157 147 154 145 056 143 157 155 012 151 142 155 056 143 157 155
0000040 000a
         \n  \0
        012 000
0000041

查看文件的od输出,看看\n字符之前是否有任何内容。

更新

根据您的评论,您的文件似乎是在DOS / Windows下创建的,因为它有一个CR / LF行结尾。使用此作为首先去除CR charcters的脚本:

#!/bin/sh
for j in `cat a.txt`
do
    i=`echo $j | sed 's/\r//g'`
    echo $i
    host $i
done

答案 1 :(得分:2)

\ 013表示您在主机名末尾有回车符。在将主机名传递给“tr -d '\r'”之前将其删除(例如使用host之类的内容)。

尝试更改:

for i in `cat a.txt`

为:

for i in `cat a.txt | tr -d '\r'`