"network-select" Cambiamento configurazione di rete - collegato anche ai nomi eth e wlan - usa ifconfig, ifup, ifdown
#!/bin/bash
# network-select
# questo script puo' essere invocato come
# + wlan -> attiva tutte le interfacce wireless (wlanX)
# + eth -> attiva tutte le interfacce fisse (ethX)
# posso dare un parametro per richiedere di caricare una nuova configurazione
# oppure nessun parametro, per passare da eth a wlan
# Per prima cosa comunque disattiva tute le interfacce attive
# Stefano Salvi <stefano@salvi.mn.it>
# this file is available under the GNU general public license
# Controlla se l'utente che lancia lo script e' ROOT (cha ha l'UID = 0)
if [ $UID -ne 0 ]
then
echo "Devi essere l'utente ROOT per operare sulle schede di rete"
echo "Puoi diventare l'utente ROOT o facendo login su di una"
echo "console come \"root\" oppure digitando il comando \"su -\""
echo "che chiede la password di root e ti trasforma nell'utente ROOT"
exit 3
fi
# Ottiene la lista delle interfacce di rete attive
RUNNINGIFACES=`ifconfig | grep "^[ew]" | sed -e "s/^\([a-z0-9]*\) .*$/\1/" -`
# Le ferma
for interface in $RUNNINGIFACES
do
ifdown $interface
done
# recupero il nome dello script (solo in nome, senza il percrso)
SCRIPT=`basename $0`
# Predispone due variabili per indicare se avviare le Ethernet o le Wlan
WLAN=""
ETH=""
# Variabile con il nome della nuova configurazione
NEWCONF=""
# Percorso del file di configurazione
NETPATH="/etc/network/interfaces"
RESOLVPATH="/etc/resolv.conf"
if [ $SCRIPT = "wlan" ]
then
WLAN="s"
elif [ $SCRIPT = "eth" ]
then
ETH="s"
fi
# processa i paramentri
# Finche' ho un parametro
while [ $1 ]
do
# Controlla il valore del parametro corrente
case $1 in
# Inizia per "-" (quindi e' un parametro)
-*)
# Controlla quale parametro
case $1 in
-w)
WLAN="s"
;;
-e)
ETH="s"
;;
# ogni altro parametro (non riconosciuto)
-*)
echo "ERRORE: Parametro $1 sconosciuto"
echo " Paramterti validi:"
echo " -w Attiva le interfacce Wireless"
echo " -e Attiva le interfacce Ethernet"
exit 1
;;
esac
;;
# Qualunque altra cosa che non e' un parametro -> configurazione
*)
NEWCONF=$1
# verifica se il file di configurazione esiste ed e' leggibile
if [ ! -r $NETPATH.$NEWCONF ]
then
echo "il file con la configurazione $NEWCONF ($NETPATH.$NEWCONF) non esiste o non e' leggibile"
exit 2
fi
;;
esac
# Passa al parametro successivo
shift
done
# Se ha un nome di configurazione, copia il relativo file nella conf. corrente
if [ $NEWCONF ]
then
cp $NETPATH.$NEWCONF $NETPATH
fi
# Se deve installare le interfacce wireless
if [ $WLAN ]
then
# cerca le righe contenti la stringa "wlan" ed estrae il nome
WLAN=`grep "^iface.*wlan" /etc/network/interfaces | \
sed -e "s/^.*\(wlan[0-9]\).*$/\1/"`
fi
# Se deve installare le interfacce wireless
if [ $ETH ]
then
# cerca le righe contenti la stringa "wlan" ed estrae il nome
ETH=`grep "^iface.*eth" /etc/network/interfaces | \
sed -e "s/^.*\(eth[0-9]\).*$/\1/"`
fi
#Concatena le interfacce
INTERFACES="$ETH $WLAN"
#Se non ci sono interfacce perche' non ho indicato ne "-w" ne "-e" ed
# il nome dello script non e' ne "wlan" ne "eth"
if [ ! "$INTERFACES" ]
then
# utilizza le interfacce attive all'avvio
INTERFACES="$RUNNINGIFACES"
fi
#Attiva le interfacce
for interface in $INTERFACES
do
ifup $interface
done
# e adesso gestisce il DNS (se trova le stringhe opportune)
# Esrae la prima riga indicante i server DNS
DNS=`grep dns-nameservers /etc/network/interfaces | head -n 1 | \
sed "s/^[ \t]*dns-nameservers[ \t]*\(.*\)$/\1/"`
# Estrae la prima riga contente un dominio di ricerca
SEARCH=`grep dns-searc /etc/network/interfaces | head -n 1 | \
sed "s/^[ \t]*dns-search[ \t]*\(.*\)$/\1/"`
#Se ha trovato i DNS
if [ "$DNS" ]
then
# Crea un backup
mv $RESOLVPATH $RESOLVPATH.old
echo "# Creato dallo script network-select" > $RESOLVPATH
if [ $SEARCH ]
then
echo "search $SEARCH" >> $RESOLVPATH
fi
for d in $DNS
do
echo "nameserver $d" >> $RESOLVPATH
done
fi