You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于动态列表实现Shell交互选择菜单以选择可用网卡接口

优化后可运行的Shell网卡选择菜单实现

原有代码问题说明

  • 数组索引默认从0开始,打印的选项序号不符合日常使用的1开头规则
  • case语句逻辑冗余且存在语法错误:无效选项提示字符串未闭合,且第一个分支无条件匹配所有输入,无法触发无效判断
  • 未做数组长度判断,单网卡场景也会弹出选择菜单,不符合需求
  • 多余的for循环打印选项,select内置会自动格式化输出选项列表

完整可运行代码

host_interfaces()
{
    # 获取状态为UP的网卡列表,过滤输出中可能附带的冒号
    arr=($(ip ad | awk '/state UP/ {gsub(/:/,"",$2); print $2}'))
    local arr_len=${#arr[@]}

    # 无可用UP网卡的异常处理
    if [ $arr_len -eq 0 ]; then
        echo "Error: No active network interface found."
        unset HOST_INTERFACE
        return 1
    fi

    # 单网卡场景直接自动赋值
    if [ $arr_len -eq 1 ]; then
        export HOST_INTERFACE=${arr[0]}
        echo "Only one active device detected: ${HOST_INTERFACE}, auto selected."
        return 0
    fi

    # 多网卡场景弹出选择菜单
    echo "Multiple devices detected, please select one from the list:"
    PS3='Please enter your choice: '
    select opt in "${arr[@]}"
    do
        # 判断是否选择了有效选项
        if [ -n "$opt" ]; then
            echo "You have selected device $opt"
            export HOST_INTERFACE=$opt
            break
        else
            echo "Invalid option, please enter the correct serial number."
        fi
    done
}

# 调用示例,执行后可直接使用$HOST_INTERFACE变量
host_interfaces

功能说明

  • 单网卡场景:自动识别赋值,无需用户操作
  • 多网卡场景:自动按1、2、3序号列出所有UP状态网卡,输入对应序号即可选择,输入非有效序号会提示重新输入,支持任意数量的动态选项
  • 无可用UP网卡场景:抛出错误提示,清空变量避免后续逻辑异常

内容的提问来源于stack exchange,提问作者Kev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 11:36:06