以下是修正后的脚本,增加了参数检查、错误处理和更清晰的输出提示:
#!/bin/bash
# 检查网络接口是否分配了IPv4地址
# 用法:has_ip <interface_name>
# 返回:0-有IP 1-无IP/参数错误
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
# 检查IPv4地址
if ip -4 -o addr show "$interface" | grep -q 'inet '; then
echo "Interface '$interface' has IPv4 address"
return 0
else
echo "Interface '$interface' has no IPv4 address assigned" >&2
return 1
fi
}
# 使用示例:
# has_ip eth0 || echo "No IP found"
改进点:
- 参数验证:明确要求传入接口名作为参数,而不是依赖全局变量
INTERFACE
- 精确检查:使用
-4
选项明确只检查IPv4地址(避免混淆IPv6) - 错误处理:
- 检查接口是否存在
- 提供明确的错误输出到stderr(&>2)
- 状态反馈:添加了更详细的输出信息,方便调试和使用者理解当前状态
调用方式改为直接传递接口名作为参数,比原来的全局变量方式更符合Unix工具的使用惯例。
内容由零声教学AI助手提供,问题来源于学员提问