在第一个字段中,如果我们想要显示主机名,它是文件的第5个字段。然后,如果我们提供给host命令的IP不存在,则该命令将返回消息3 (NXDOMAIN)。脚本应该能够识别命令是否“未找到”。在这种情况下,它必须简单地打印(-)。
#!/bin/bash
ip="$1"
if [ "$ip" ] ; then
host "$ip" | cut -d' ' -f5
elif
[[ "$ip" =~ "[3(NXDOMAIN)]$" ]] ; then
echo "-"
fi
你对这个练习有什么解决方案吗?
发布于 2020-06-04 05:30:58
您测试的不是host
命令的结果,而是原始$ip
变量的值。
将输出保存到一个变量,测试该变量,然后根据测试打印输出或-
。
您不需要执行regexp匹配,只需精确匹配字符串即可。
#!/bin/bash
ip="$1"
if [ "$ip" ] ; then
result=$(host "$ip" | cut -d" " -f5)
if [[ $result = "3(NXDOMAIN)" ]] ; then
echo "-"
else
echo "$result"
fi
fi
发布于 2020-06-04 11:20:33
答案比你想象的要简单得多,你不需要做任何匹配。您可以只使用来自host
的返回代码
#!/bin/bash
ip="$1"
if domain=$(host "$1"); then
echo "${domain##* }"
else
echo "-"
fi
概念证明
$ testHost(){ if domain=$(host "$1"); then echo "${domain##* }"; else echo "-"; fi }
$ testHost 172.217.6.46
sfo03s08-in-f14.1e100.net.
$ testHost 172.217.6.466
-
发布于 2020-06-04 05:40:34
#!/bin/bash
if [ -n "$1" ] && [[ $1 =~ ^[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+\.[[:digit:]]+$ ]] ;then
res=$(host "$1" | cut -d' ' -f5)
if [ "$res" != "3(NXDOMAIN)" ]; then
echo "$res"
else
echo "-"
fi
else
echo "please enter a valid ip"
fi
https://stackoverflow.com/questions/62182898
复制相似问题