我有这个命令:
ptr=`host $hostname`
结果是这样的:
test.tester.test has address 192.168.1.1
这有效!
我现在想要的是仅提取 IP 地址 (192.168.1.1),将其传递给变量 $myptr 并运行以下命令:
if $myptr | sed -n '/\(\(1\?[0-9][0-9]\?\|2[0-4][0-9]\|25[0-5]\)\.\)\{3\}\(1\?[0-9][0-9]\?\|2[0-4][0-9]\|25[0-5]\)/p' ; then
host $myptr
else
echo "No PTR Record found"
fi
但这不起作用。请帮忙?
答案1
您不需要对 的输出进行任何多余的文本处理host
,您只需使用即可dig +short
仅获取 IP 地址(并对 IP 进行所需的反向查找)。
dig +short "$hostname"
例如
ip="$(dig +short "$hostname")"
host "$ip"
或者直接:
host "$(dig +short "$hostname")"
答案2
要提取 ip,您可以 awk 它,例如:
ptr=`host $hostname | awk '/has address/ {print $NF}'`
- /有地址/仅以该字符串作为主机的 mach 行可以为您返回更多内容。例如尝试谷歌。
- 打印 $NF- NF 是 awk 的返回字段数的变量,因此 $NF 指向最后一个字段。
然后你可以使用 grep 并检查它的返回代码(sed 将返回 0 无论它是否找到你的正则表达式。所以这样做会起作用:
echo $ptr | egrep "your pattern"
if [ $? -eq 0 ]; then
echo "This Works"
fi
但你可以简单地检查是否$ptr包含一个输出。如果主机命令找不到任何内容$ptr将是空的,所以:
if [ -n $ptr ]; then
echo "Works"
else
echo "Not found :("
fi
看一眼人测试:
-n STRING
the length of STRING is nonzero
-z STRING
the length of STRING is zero