从你的测试结果来看,确实发现了一个有趣的现象:
ip -4 -o addr show "wlan0" | grep -q 'inet '
命令没有输出(这是正常的因为用了-q
静默模式),但返回值为空表示没有匹配到IP- 但是
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"
主要修改点:
改用更兼容的IP检测方式:
ip -4 addr show
+awk
组合,比简单的grep更可靠
- awk会提取包含’inet’的行中的第二个字段(IP地址)
添加了备选方案注释:
- 如果需要,可以回退到使用传统的ifconfig命令来检测
保持原有的错误处理和参数验证
这个新版本应该能正确检测到你wlan0接口上的192.168.30.189这个IPv4地址。
内容由零声教学AI助手提供,问题来源于学员提问