#!/bin/sh warn() { if [ $# -gt 0 ]; then echo "$@" >&2; else warn "Something is wrong."; fi; } die() { r=$?; warn "$@"; if [ $r = 0 ]; then exit -1; else exit $r; fi; } while [ $# -gt 0 ]; do case "$1" in --wifi) list_wifi_interfaces=y ;; --reload) reload_modules=y ;; --quiet) quiet=y ;; esac shift done list_interfaces() { if [ "$list_wifi_interfaces" ]; then /sbin/iwconfig 2>/dev/null | grep '^[^ ]' else /sbin/ip -f link addr | while read _ iface _; do echo ${iface%:*}; done fi } list_interfaces | while read iface _; do for f in /sys/class/net/$iface/device/driver/module/drivers/*; do test -L "$f" || continue module=$(basename "$(readlink "$f")") if [ "$reload_modules" ]; then modprobe -r "$module" modprobe "$module" fi if ! [ "$quiet" ]; then echo "$module" fi done done