将可变 IP 地址传递给 if else

将可变 IP 地址传递给 if else

我有这个命令:

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

相关内容