AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 58768
Accepted
devin
devin
Asked: 2009-08-26 17:43:11 +0800 CST2009-08-26 17:43:11 +0800 CST 2009-08-26 17:43:11 +0800 CST

测试 IP 的 BASH 脚本

  • 772

有没有一种优雅的方法可以在 BASH 脚本中测试 IP 地址?我可以执行 ifconfig 并使用 sed/awk 缩小 IP,但我认为有一个更简单的解决方案。

当我在 Intranet 中和不在时,我的应用程序基本上使用 SSH/SCP 脚本。所以,我想要这种类型的流程

if IP=192.168.1.1
      then do this
 else
      then do that
bash
  • 6 6 个回答
  • 4637 Views

6 个回答

  • Voted
  1. Best Answer
    MikeyB
    2009-08-26T18:03:51+08:002009-08-26T18:03:51+08:00

    一些相当简单的东西,您可以修改以满足您的需求:

    ip addr show dev eth0 | fgrep -q 'inet 192.168.1.1'
    if [ $? -eq 0 ]; then
       echo 'IP found'
    else
       echo 'IP not found'
    fi
    

    编辑:忘记了 fgrep :)

    • 7
  2. nik
    2009-08-26T18:04:52+08:002009-08-26T18:04:52+08:00

    如果要区分您是否在 Intranet 中连接,
    您可以通过快速短 ping 或 arp 尝试检查已知的内部服务器 IP。
    如果 IP 没有响应,你很可能在 Intranet 之外。

    可能会有轻微的故障(比如服务器暂时关闭)。
    这些可以被允许(您错误地切换到 Internet 模式),
    或者,通过多次检查(通过不同的内部资源)进一步测试。

    • 2
  3. chris
    2009-08-27T06:19:38+08:002009-08-27T06:19:38+08:00

    这更像是对 mikeB 答案的评论,但评论不允许代码,所以我将其作为答案发布:

    您可以使用 grep 之类的东西来查找您要查找的内容,例如

    ip addr show dev eth0 | fgrep -q 'inet 192.168.1.1'
    if [ $? -eq 0 ]; then
       echo 'IP found'
    else
       echo 'IP not found'
    fi
    

    这实际上可以简化为摆脱退出状态的测试( [ 是 test 的别名),因为 if 已经直接检查退出状态,这就是 test 与 if already 通信的方式:

    if 
      ifconfig | fgrep -q 'inet 192.168.1.1'
    then
      echo "IP Found"
    else
      echo "IP Not found"
    fi
    

    您可以通过使用 case 语句使用大多数 bourne shell 中内置的正则表达式搜索来进一步简化此操作:

    case $(ifconfig)
    in 
      *"inet 192.168.1.1"*) 
         echo "IP found" 
       ;;
      *) 
        echo "IP not found" 
       ;; 
    esac
    
    • 1
  4. cas
    2009-08-26T18:38:52+08:002009-08-26T18:38:52+08:00

    一种(IMO,更复杂,更容易失败)方法是配置您的 dhcp 客户端,将分配的 IP 地址保存到某个方便的文件中。

    例如,使用 dhclient,您只需将脚本放入 /etc/dhcp3/dhclient-enter-hooks.d/ 即可将当前 IP 保存到文件中,例如 /var/run/current-IP.txt

    然后您的其他脚本可以只对该文件进行分类以获取当前 IP。

    这样做的问题是它只告诉你最后一次由 dhcp 分配的IP 地址是什么。它实际上并没有告诉您您现在的 IP 地址是什么。它们可能相同,也可能不同。

    • 0
  5. Michael Pobega
    2009-08-26T18:50:33+08:002009-08-26T18:50:33+08:00

    ip addr show <DEVICE> | grep inet | grep -v inet6 | awk '{print $2}'

    希望这应该输出您的IP。可能有一种更优雅的方式来做到这一点,但不管优雅如何,这都能完成工作。

    • 0
  6. Ali Mezgani
    2009-08-27T06:26:04+08:002009-08-27T06:26:04+08:00

    
    #!/bin/bash
    address="192.168.0.1"
    interface="eth0"

    ip=$(ifconfig -a $interface | awk -F: '/inet/ {print $2}' | head -n 1 | awk '{print $1}') if [ ${ip} == ${address} ]; then #Do something fi

    • 0

相关问题

  • Mac OS X:从 python 脚本中更改 $PATH

  • Bash 脚本:要求脚本以 root 身份运行(或使用 sudo)

  • crontab ifconfig 什么都不输出

  • 使用命令行工具按排序顺序计算重复项

  • 是否有 bash 等效于 ruby​​ 的“一些内容#{foo}”?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    从 IP 地址解析主机名

    • 8 个回答
  • Marko Smith

    如何按大小对 du -h 输出进行排序

    • 30 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    Windows 中执行反向 DNS 查找的命令行实用程序是什么?

    • 14 个回答
  • Marko Smith

    如何检查 Windows 机器上的端口是否被阻塞?

    • 4 个回答
  • Marko Smith

    我应该打开哪个端口以允许远程桌面?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    MikeN 在 Nginx 中,如何在维护子域的同时将所有 http 请求重写为 https? 2009-09-22 06:04:43 +0800 CST
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    0x89 bash中的双方括号和单方括号有什么区别? 2009-08-10 13:11:51 +0800 CST
  • Martin Hope
    kch 如何更改我的私钥密码? 2009-08-06 21:37:57 +0800 CST
  • Martin Hope
    Kyle Brandt IPv4 子网如何工作? 2009-08-05 06:05:31 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve