首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Ip主机脚本bash

Ip主机脚本bash
EN

Stack Overflow用户
提问于 2020-06-04 05:19:12
回答 4查看 95关注 0票数 2

在第一个字段中,如果我们想要显示主机名,它是文件的第5个字段。然后,如果我们提供给host命令的IP不存在,则该命令将返回消息3 (NXDOMAIN)。脚本应该能够识别命令是否“未找到”。在这种情况下,它必须简单地打印(-)。

代码语言:javascript
运行
复制
#!/bin/bash
ip="$1"

if [ "$ip" ] ; then
         host "$ip" | cut -d' ' -f5

 elif
         [[ "$ip" =~ "[3(NXDOMAIN)]$" ]] ; then
                echo "-"
fi

你对这个练习有什么解决方案吗?

EN

回答 4

Stack Overflow用户

发布于 2020-06-04 05:30:58

您测试的不是host命令的结果,而是原始$ip变量的值。

将输出保存到一个变量,测试该变量,然后根据测试打印输出或-

您不需要执行regexp匹配,只需精确匹配字符串即可。

代码语言:javascript
运行
复制
#!/bin/bash
ip="$1"

if [ "$ip" ] ; then
    result=$(host "$ip" | cut -d" " -f5)
    if [[ $result = "3(NXDOMAIN)" ]] ; then
        echo "-"
    else
        echo "$result"
    fi
fi
票数 2
EN

Stack Overflow用户

发布于 2020-06-04 11:20:33

答案比你想象的要简单得多,你不需要做任何匹配。您可以只使用来自host的返回代码

代码语言:javascript
运行
复制
#!/bin/bash
ip="$1"

if domain=$(host "$1"); then
  echo "${domain##* }"
else
  echo "-"
fi

概念证明

代码语言:javascript
运行
复制
$ 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
-
票数 2
EN

Stack Overflow用户

发布于 2020-06-04 05:40:34

代码语言:javascript
运行
复制
#!/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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62182898

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档