[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

[BASH] selezionare rete wireless da shell



Buonanotte lista!

Da profondo ignorante (ma curioso) di ogni linguaggio di programmazione quale sono, ho deciso di voler creare un piccolo script in bash per sapere quante reti wireless trovo con il portatile e poter, con un semplice input sul terminale, collegarmi ad esse (ipotizzando che siano tutte aperte).

Per questo ho provato a buttar giù uno script, MOLTO elementare, ma non riesco a finirlo.

Il tutto parte dal semplice output del comando "# iwlist wlan0 scan"

Ho quotato ogni passaggio per spiegare cosa vorrei fare:

#!/usr/bin
# 1. conto le reti disponibili
iwlist wlan0 scan > /tmp/wifi
echo Ci sono `cat /tmp/wifi |grep Cell | wc -l` reti wireless nelle vicinanze che si chiamano # 2. faccio la lista dei differenti ESSID (fare un sed per ottenere solo i nomi e non il descrittivo)
awk '/ESSID/ { print $0}'
# 3. creo per ogni ESSID un file temporaneo differente (inserire almeno un for)
awk '/ESSID/ { print $0}'> /tmp/wifi1
# 4. ad ogni file creato assegno una variabile
# 5. scelgo la rete alla quale voglio collegarmi tra quelle disponibili
echo -n "A quale rete vuoi provare a collegarti?"
read RETE
# 6. Per la rete scelta scelgo i parametri adatti, prendendoli dal file temporaneo creato
echo RETE = $RETE
# 7. se il nome inserito è tra le reti disponibili (completare)
if $RETE
# 8. allora prova a connetterti (perfezionare il grep con un sed, cosicchè si abbiano solo i valori Mode, Channel e essid, senza la descrizione)
then
echo "Ok, connessione in corso..."
iwconfig wlan0 mode `cat /tmp/wifi |grep Mode |grep [Mode:]` channel `cat /tmp/wifi |grep Channel | grep [Channel:]` essid $RETE
# 7. lancio il dhcp
dhclient wlan0
echo "...fatto!"
else
# 8. se invece inserisco nome non nella lista del punto 3, riporta l'errore.
echo "Rete sconosciuta"
fi
# 9. finisco cancellando tutti i files temporanei creati
rm /tmp/wifi*
exit 0


Come si vede lo script è davvero elementare, ma nonostante ciò trovo alcuni problemi:

1. come posso "epurare" la lista al punto 2 e analogamente al punto 8., in modo tale che rimangano solo i nomi della lista? Forse con un sed, ma non riesco a capire in che modo. Il risultato da processare è infatti più o meno il seguente (quindi vengono visti come una sola parola):

ESSID:"Al"
ESSID:""
ESSID:"Jonnhy"
ESSID:"Jack"

2. come assegno poi ad ogni nome essid una variabile diversa, così poi da poterla richiamare al momento della scelta della rete?

Vi sarei gratissimo se mi poteste aiutare. Ovviamente potrei fare il tutto da terminale o con GUI specifiche, ma mi piacerebbe rendere più immediata e leggera la scelta (oltre che, soprattutto, imparare).

Grazie a tutti,

giopas

--
"The paradigm of competition is a race: by
rewarding the winner, we encourage everyone
to run faster. When capitalism really works
this way, it does a good job; but its defenders
are wrong in assuming it always works this way.
If the runners forget why the reward is offered
and become intent on winning, no matter how, they
may find other strategies--such as, attacking
other runners. If the runners get into a fist
fight, they will all finish late."	
(GNU manifesto/R. Stallman)


Reply to: