#!/bin/bash
# lastact: arturo@2022-3-28
# desc: Obtenmos las MAC address de la interfaz pasada como párametro o del tipo indicado

FICHFUNCS="/usr/bin/vx-funcs-bash"
[ -f "${FICHFUNCS}" ] && . "${FICHFUNCS}" "null"

# Mostramos la ayuda si se pasa como parámetro -h o --help:
AYUDA="Script encargado de mostrar la dirección MAC de la interfaz pasada como parámetro o el tipo de interfaz."
AYUDA+="\nSino se pasan parámetros se mostrarán todas las MACs de las interfaces de red encontradas."
EJEMPLOS=("${0} \"wifi\" # Muestra las MAC de las interfaces del equipo de tipo wifi")
EJEMPLOS+=("${0} \"ethernet\" # Muestra las MAC de las interfaces del equipo de tipo ethernet")
EJEMPLOS+=("${0} \"wlo1\" # Muestra las MAC de las interfaz wlo1")
EJEMPLOS+=("${0} # Muestra las MAC de todas las interfaces que se localizen")
vx-check_need_help "${1}" &&
    vx-show_help "${0}" "${AYUDA}" "${EJEMPLOS[@]}" &&
    exit 0

RESULTADOS=()
# Types: wireless|wifi, ethernet
[[ ! -z "${1}" ]] &&
    {
        [[ -f "/sys/class/net/${1}/address" ]] &&
            cat "/sys/class/net/${1}/address" && exit 0
        TIPOS="${1}"
    } ||
    TIPOS="ethernet|wireless|wifi"

OLDIFS=$IFS
IFS=$'|'
for TIPO in ${TIPOS}; do
    IFS=$OLDIFS
    for LINEA in $(nmcli -t -f device,type dev status | grep -E "${TIPO}"); do
        IF_WIRELESS="$(echo "${LINEA}" | cut -d":" -f1)"
        [[ ! -z "${IF_WIRELESS}" && -f "/sys/class/net/${IF_WIRELESS}/address" ]] &&
            MAC_IF_WIRELESS="$(cat "/sys/class/net/${IF_WIRELESS}/address")" &&
            RESULTADOS+=("${MAC_IF_WIRELESS}|${IF_WIRELESS}|${TIPO}")
    done
    OLDIFS=$IFS
    IFS=$'|'
done
IFS=$OLDIFS

((${#RESULTADOS[@]} == 0)) &&
    echo "=> No se ha encontrado ninguna dirección MAC de ninguna interfaz"
((${#RESULTADOS[@]} == 1)) &&
    echo "${RESULTADOS[0]}" | cut -d"|" -f1
((${#RESULTADOS[@]} > 1)) &&
    for RESULTADO in "${RESULTADOS[@]}"; do
        MAC="$(echo "${RESULTADO}" | cut -d"|" -f1)"
        INTERFAZ="$(echo "${RESULTADO}" | cut -d"|" -f2)"
        TIPO="$(echo "${RESULTADO}" | cut -d"|" -f3)"
        echo "${INTERFAZ}[${TIPO}]: ${MAC}"
    done
exit 0
