![]()
Sommario:
1- Introduzione
2- Spiegazione sorgente della lez. precendente
3- Variabili
3.1 Read
4- Conclusione
4.1 Programma di riepilogo
################
# INTRODUZIONE #
################
Bentornati ragazzi (e spero anche ragazze), siamo dinuovo qui
per la seconda lezione di Bash Scripting.
Nella volta scorsa abbiamo visto cos'è (alla leggera) uno
script bash, e cosa sono le redirezioni di input e output.
In questa lezione invece (che credo sara' più breve, vedremo
come usare le variabili in bash. E faremo qualche esempio.
################################
# SPIEGAZIONE PROGRAMMA, LEZ 1 #
################################
Alla fine della prima lezione, avevo scritto un sorgente di un
"grettissimo" prog per vedere il proprio ip. Vi ho dato tempo
per riflettere, ma se qualcuno ancora non avesse compreso, mi
accingo a commentarlo
------ ip.sh ------
#!/bin/sh
echo "http://www.mojodo.it - Resinaro"
echo "Il modo più malato per vedere il proprio ip"
echo "Coded by ******** (mi vergogno..)"
echo "-------------------------------------------"
echo -n "Scarichiamo la pagina contenente l'ip.. "
#una serie di echo, inutile dire altro
wget http://www.putrella.com/ip.asp &> wget.out
#come abbiamo detto la volta scorsa, ogni riga
#in bash, è come un comando. quindi in questo caso
#usiamo wget per scaricare il file ip.asp (un sito
#a caso che contenga il nostro ip nella pagina).
#Faccio notare che ho usato anche una redirezione
#"&>" che redirige stdout e stderr, in un file.
echo "fatto.."
echo "Una serie di cut e grep per beccare il nostro IP.. "
cat ip.asp | grep "Il tuo indirizzo IP in questo
momento" | cut -d '>' -f2 | cut -d '<' -f1 > /tmp/.resi-ip
#Mostriamo la riga che ci interessa con un cat,
#poi reindirizziamo l'output come input del
#comando seguente. (con i pipe) poi "greppiamo"
#soltanto la riga che ci interessa e con una serie
#di cut, tagliamo solo la parte che ci interessa
#e la rediregiamo verso /tmp/.resi-ip
echo "-----------------------------"
echo -n "Il tuo attuale ip è: "
echo `cat /tmp/.resi-ip`
echo "-----------------------------"
echo -n "Rimozione del file che contiene l'ip e del file dello script "
#alcuni echo di facile comprensione che ci mostrano
#il file /tmp/.resi-ip.
#N.B. Nota che il comando è tra ` ` altrimenti sullo
#schermo avremmo visto scritto cat "/tmp/.resi-ip" e non
#il risultato del comando. Quindi quando specifichiamo
#il risultato di un comando dobbiamo metterlo tra ``
#ma questo lo vedremo tra poco anche con le variabili
rm -rf ip.asp
rm -rf wget.out
#cancelliamo i file usati per lo script.
echo "Fatto."
echo "in caso ti scordassi il tuo ip lo potrai rivedere facendo:"
echo "cat /tmp/.resi-ip"
echo "----- EOF ------"
------ ip.sh ------
#############
# VARIABILI #
#############
Bene bene, inizio con dirvi che nel Bash Scripting, le variabili non
hanno bisogno di essere dichiarate, infatti si passa direttamente al
dargli un valore.
Facciamo subito un banale esempio..
-------------- Var --------------
#!/bin/sh
RESI="Ciao Resinaro, sei un figo"
echo $RESI
-------------- EOF --------------
Ok.. come si può facilmente notare dalla prima riga, la variabile
si dichiara con "VARIABILE=", in questo caso la variabili ha valore
di "Ciao Resinaro.....". La cosa che vi faccio notare è che tutto
quello che sta dopo l'uguale (=) e parte della variabile. (al
contrario di quello che all'inizio pensavo anche io o_O ). In questo
caso, se no avessimoomesso i doppi apici, non verrebbe stampato
Ciao.., perchè verrebbe considerato un comando da dare alla
variabili e quindi facevo echo altrocomando, darebbe errore.
Una volta che abbiamo dato il valore alla variabile, possiamo
richiamarla con $NOMEVARIABILE.
Le variabili non hanno distinzione, nel senso che possono assumere
come valore qualunque stringa. Che sia un numero, una frase, un
comando ed anche il risultato di un comando..
Spero che questa ultima possibilita' vi abbia fatto scattare sulla
sedia. Poichè se ricordate nella lezione precedente abbiamo visto
come fare a farlo.
Oggi lo ripeto xchè ho voglia di scrivere ma nelle prossime lezioni
evitero' di scrivere cose che gia conosciamo..
-------------- Var --------------
#!/bin/sh
UNAME=`uname -a`
#come abbiamo gia detto, i "risultati" dei comandi vanno
#messi tra `` (alt+096 OPPURE AltGr+')
echo "$UNAME"
-------------- EOF --------------
Proviamo ad eseguirlo, e vediamo che uscira' esattamente l'output
di uname -a. Ovviamente possiamo usare echo perchè l'output è di una
sola riga, se invece fosse di più righe, e quindi o evitiamo di usare
echo (e quindi redirezioniamo tutto su un file e poi `cattiamo')
oppure usiamo un echo però con un ciclo.. che spieghero' nelle
prossime lezioni.
*- Read
Ora sappiamo come dare un valore ad una variabile nel codice,
ma se il nostro scopo è dare durante l'esecuzione del programma
un valore ad una variabile? Come potremmo fare? Mhhhhh.. Mhhhhh..
Ah! (che attore!) In questo caso ci viene in aiuto il comando
"read" che serve proprio per "leggere" quello che la nostra tastiera
digita e mandarlo ad una variabile.
Visto che non so' cosa fare, vi spiego le varie funzioni del read
che potranno sempre esservi utili.
faccio un esempio..
$ echo -n "inserisci un valore " ; read ciao ; echo $ciao
eseguiamo questo comando e seguiamo le istruzioni =)
tutto è chiaro spero, quindi basta spiegarvi il comando read.
read ciao, è il comando che aspetta il valore che immettiamo con
la tastiera, e che identifica in una variabile ciao (che come
sappiamo!!! possiamo "richiamare" con $ciao)
Alcuni esempi per le opzioni di `read':
$ read -t 10 ciao ; echo $ciao
#l'opzione -t (timeout) serve per stabilire un tempo
#massimo (in secondi) in cui è possibile inserire il
#valore della variabile, che dopo i 10 sec (per es.)
#assume come valore niente, oppure il valore che aveva
#prima la variabile (nn ne sono sicuro di questo!)
$ read -p "Immetti qui il valore " valore ; echo $valore
#figo! -p sta per prompt. Serve per dare un prompt
#nell'immissione dei dati, per es in questo caso
#eseguendo il comando avremo una cosa del genere:
[sirk@Mojodo /]$ read -p "valore: " valore ; echo $valore
valore: valore =) sirk
valore =) sirk
[sirk@Mojodo /]$
#spero che abbiate capito =)
$ read -n 10 ciao ; echo "" ; echo $ciao
#-n sta per nchars (numero caratteri) che stabilisce
#il numero massimo di caratteri che possiamo immetere,
#una volta finiti questi, il valore della variabile
#sara' uguale ai primi N caratteri (in questo caso 10)
$ read -d b ciao ; echo "" ; echo $ciao
#-d sta per delim, serve per delimitare un carattere
#entro il quale il valore della variabile si stoppa.
#SICCOME PARLO COME UN CANE, SPIEGO CON UN ESEMPIO!
#in questo caso, quando andiamo a dare il valore
#alla variabile, appena nel valore immetteremo il
#carattere "b", tutto si fermera', e il valore della
#var sara' tutto quello scritto prima della "b"
Ora sapete tutto (quasi) del read, vi rimando cmq a man read.
###############
# CONCLUSIONE #
###############
Eccoci alla fine della seconda lezione, mi sono divertito anche
questa volta, e il bash scripting mi piace sempre di più.
In questo tutorial saluto prevalentemente:
Salvo`B (che mi ha detto che il tutorial N1 era ottimo)
lupsyn (anche lui mi ha detto che era buono)
c3nt0q (Ci sono troppe cose per cui dovrei ringraziarlo.. :P)`
*- Come al solito vi lascio con un programmino.. che avevo gia
scritto, ma che ho modificato per il tutorial e che racchiude tutto
quello imparato fino ad ora =) Ovviamente con pochi commenti perchè
dovete capire da soli! :D
------------------- lgxipv6up.sh -------------------
#!/bin/sh
#########################################################
# sirk (Resinaro) Present: (:P) #
# Script semiautomatizzare l'aggiornamento del tunnel #
# di lgx.it (http://www.lgx.it) e per renderlo attivo #
# sulla propria macchia. Comunque il vero scopo di #
# questo script è fare un esempio in Bash Scripting! #
# Occhio ai commenti! =) #
#########################################################
#########################################################
# USO: #
# Innanzi tutto dovete modificare le variabili (facile) #
# eseguire con un # sh lgxipv6up.sh #
# FUNZIONAMENTO: #
# Siccome nn ho trovato il modo di automatizzare tutto #
# da lynx (non credo cmq sia possibile (forse sbaglio) #
# ho pensato di far apparire prima tutte le info nel #
# terminale, poi far aprire un browser per aggiornare #
# l'ipv4 e cose varie nel sito, e poi (alla chiusura #
# del browser) concludere con la configurazione del #
# protocollo sulla macchia. Spero sia tutto chiaro. #
# By sirk (Resinaro) #
#########################################################
#### Variabili da personalizzare
USERID="nomeutente"
PASSWD="password"
IPV6ADDR="3ffe:..../127" ## fornito da lgx.it
#### Variabili da NON modificare
echo -n "Scarichiamo la pagina contenente l'ip.. "
wget http://www.putrella.com/ip.asp &> wget.out
echo "fatto.."
echo "Una serie di cut e grep per beccare il nostro IP.. "
IP=`cat ip.asp | grep "Il tuo indirizzo IP in questo
momento" | cut -d '>' -f2 | cut -d '<' -f1`
## Sfruttiamo il sistema dello script della
## prima lerzione ma usando una variabile
echo -n "Rimozione del file che contiene l'ip e del file dello script "
rm -rf ip.asp
rm -rf wget.out
echo "Fatto."
LOGINIPV6="http://www.lgx.it/updatetb.htm" ## La pagina per fare il login
#### Pubblicita' =)
echo "-----------------------------------------"
echo " Script creato da sirk (Resinaro)"
echo " http://www.mojodo.it"
echo "-----------------------------------------"
#### Update Tunnel
echo "Il tuo nome utente è: $USERID" ## Per comodita' "stampiamo"
echo "La tua password è: $PASSWD" ## nome utene, password e IPv4
echo "Il tuo attuale IPv4 è: $IP" ## sullo schermo
echo "digitare il browser con cui si desidera aprire la pagina del login.."
read BROWSER
$BROWSER $LOGINIPV6 ###Apriamo il browser (da voi scelto) alla pagina del
login
#### Installazione Ipv6
echo -n "Configurazione dell'ipv6 sulla macchina..."
ifconfig sit0 down
ifconfig sit0 up >> /var/log/tb.log
ifconfig sit0 inet6 add $IPV6ADDR >> /var/log/tb.log
route -A inet6 add ::/0 dev sit0
route -A inet6 add 2000::/3 gw ::213.255.41.73
echo "ok.."
#### Rimossione logfile (inutili :P)
echo -n "Cancello i file creati per lo script..."
rm -rf /var/log/tb.log
echo "ok!"
echo "------------------ EOF ------------------"
------------------ FINE ---------------------
Alla prossima,
sirk
N.B. magari qualcuno non sa che ho cambiato nick,
quindi lo "ufficializzo" :P "Resinaro non esiste più
o almeno per ora nn esiste, poi si vede. Per ora mi chiamo
sirk"
© GnomixLand http://www.gnomixland.com/ |