ZBLOG

firefly@firefly:~$ ip -4 -o addr show "wlan0" | grep -q 'inet ' firefly@firefly:~$ firefly@firefly:~$ ifconfig wlan0 wlan0: flags=4163 mtu 1500 inet 192.168.30.189 netmask 255.255.255.0 broadcast 192.168....

从你的测试结果来看,确实发现了一个有趣的现象:

  1. ip -4 -o addr show "wlan0" | grep -q 'inet ' 命令没有输出(这是正常的因为用了-q静默模式),但返回值为空表示没有匹配到IP
  2. 但是 ifconfig wlan0 明确显示有IPv4地址 192.168.30.189

这说明我们之前的脚本逻辑需要修正。问题在于 ip 命令的输出格式可能在不同系统/版本上有差异。

以下是修正后的脚本:

#!/bin/bash

has_ip() {
    # 参数检查
    if [ $# -ne 1 ]; then
        echo "Usage: ${FUNCNAME[0]} <interface_name>" >&2
        return 1
    fi

    local interface="$1"
    
    # 检查接口是否存在
    if ! ip link show "$interface" &>/dev/null; then
        echo "Error: Interface '$interface' not found" >&2
        return 1
    fi

    # 更兼容的IP地址检查方式(处理不同版本的ip工具)
    if ip -4 addr show "$interface" | awk '/inet / {print $2}' | grep -q .; then
        echo "Interface '$interface' has IPv4 address"
        return 0
    else
        echo "Interface '$interface' has no IPv4 address assigned" >&2 
        return 1
    fi
    
    # 备选方案:也可以使用ifconfig检查(如果ip命令不可靠)
    # if ifconfig "$interface" | grep -q 'inet '
}

# 测试用例:
has_ip wlan0 || echo "No IP found"

主要修改点:

  1. 改用更兼容的IP检测方式

    • ip -4 addr show + awk组合,比简单的grep更可靠
    • awk会提取包含’inet’的行中的第二个字段(IP地址)
  2. 添加了备选方案注释

    • 如果需要,可以回退到使用传统的ifconfig命令来检测
  3. 保持原有的错误处理和参数验证

这个新版本应该能正确检测到你wlan0接口上的192.168.30.189这个IPv4地址。


内容由零声教学AI助手提供,问题来源于学员提问

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://sdn.0voice.com/?id=8239

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?