[GUIDA] Principi di Bash scripting
Questa guida e' applicabile anche ad Android in quanto integra diversi binari, accessibili sia tramite script che tramite input diretto da ADB oppure dall'emulatore del terminale sul telefono.
Questa e' solo una infarinata generale sull'argomento, la sintassi utilizzata e gli statement piu' comuni.
Questa guida potrebbe esservi utile per automatizzare qualche comando quando usate adb o fastboot e ridurre le digitazioni ;)
Tutto quello che elenchero' qui di seguito e' applicabile, sia tramite comando diretto nella shell, sia tramite script, ossia un file con estensione .sh che contiene tutti i comandi che la shell dovrà eseguire in modo lineare ( ossia da sinistra a destra, dall'alto al basso eccezion fatta per le funzioni, che vedremo dopo)
quindi cominciamo:
impostazione del file:
Quote:
la prima riga del nostro script dovrà SEMPRE avere la dicitura seguente:
codice:
#!/bin/bash
oppure
#!/bin/sh
questa riga serve per indicare alla shell ( aka terminale) quale delle shell disponibili e quale sintassi andremo ad usare
le righe seguenti a questa conterranno i comandi, gli statement , ed eventuali commenti.
Cap 1 : VARIABILI
Quote:
le variabili vendono utilizzate per impostare un valore fisso oppure memorizzare l'output di un comando.
Attenzione pero', se 2 variabili possiedono lo stesso nome, quando verra' eseguita la seconda variabile , verra' sovrascritta la prima, e' quindi opportuno dare nomi diversi alle variabili in modo da non creare confusione ( a meno che non si voglia sovrascrivere il contenuto della variabile precedente ovviamente!)
Esempi:
variabile preimpostata:
variabile determinata dall'output di un comando:
codice:
VAR=`echo "ciao"`
va sottolineato che le variabili non vengono visualizzate direttamente nell'output della shell ma vanno richiamate!!
per gli esempi sopra citati e' molto semplice, ed e' ovviamente applicabile a tutti i passi successivi che faremo.
ecco come:
in questo modo noi diremo alla shell di visualizzare nell'output la variabile.
le variabili possono avere qualsiasi nome vogliate ( VAR, LOL, ASD; ABCD, XYZ) purchè siano seguite dal simbolo "=" e il contenuto della variabile deve essere incluso fra i simboli :
apostrofo '........'
virgolette "......."
accento `.........`
Arrays:
Quote:
sono vettori ( vedi definizione matematica di vettore) oppure matrici ( in caso di array multidimensionali)
dopo questo comando potremo inserire i singoli valori per la lista come segie:
codice:
array[0]="ciao"
array[1]="si"
array[2]="no"
array[3]="boh"
array[4]="asdlalla"
una volta dichiarata la lista potremo richiamare i singoli elementi, tutti gli elementi oppure il numero di elementi nella lista nel modo seguente:
richiama un valore specifico:
richiama tutti i valori:
visualizza quanti sono i valori nella lista
codice:
echo ${#array[@]}
gli arrays sono utili spesso e volentieri nei loop ( di seguito)
IF statement:
Quote:
questo statement viene utilizzato per eseguire comandi in base a determinate condizioni e la sintassi e la seguente:
codice:
if [condizione]; then
<<<<<esegue alcuni comandi>>>>>
else
<<<< esegue altri comandi >>>>>>
fi
italianizzando la sintassi avremmo qualcosa del genere:
codice:
SE [condizione verificata] ; ALLORA
<<<< esegue alcuni comandi >>>>>>
ALTRIMENTI
<<<< esegue questi altri comandi >>>>
fi ( chiusura della condizione )
per la condizione esistono diverse opzioni e sono ( i piu' usati):
= |
a uguale b ( corrisponde anche a ==) |
-e |
la condizione esiste ( o il file esiste) |
!= |
a diverso da b |
-le |
"less equal" ossia inferiore o uguale |
-gt |
"greater than" ossia maggiore di (a maggiore di b ) |
-eq |
a uguale b |
Esempio:
codice:
VAR="5"
if [ $VAR -eq 5 ] ; then
echo $VAR
else
echo " VAR non e' uguale a 5"
fi
provate a cambiare il valore di VAR per avere i diversi risultati
oppure
codice:
VAR="10"
if [ $VAR -le 10 ] ; then
echo "la variabile e' inferiore o uguale a 10"
else
echo "la variabile e' maggiore di 10"
fi
oppure
codice:
VAR="ciao"
if [ "$VAR" == "ciao" ] ; then
echo "uguali"
else
echo "diversi"
fi
Loop statements:
Quote:
i loop sono funzioni che vengono ripetute fino a che la condizione non risulta verificata oppure fino a che l'utente non la interrompe.
esistono 2 tipi di loop: while e for.
while loop:
Quote:
il loop con while viene utilizzato fino a che una condizione non e' verificata, quindi:
codice:
x=1
while [ $x -le 5 ]
do
echo "ciao $x volte"
x=$(( $x + 1 ))
done
il loop continuera' fino a quando "x" non sara' uguale a 5, come? analizziamo la sintassi
while [ $x -le 5 ]
do
traducendo e': MENTRE [$x e' inferiore o uguale a 5] esegui
echo "ciao $x volte"
x=$(( $x + 1 ))
"echo" non fa altro che visualizzare un messaggio
"x=$(( $x + 1 ))" = si occupa di incrementare "x" di uno ad ogni giro fino a che non sara' uguale a 5
va sottolineato che all'ultimo giro del loop, ossia quando X sara' uguale a 5, verra' comunque effettuata la somma di 1 a x, quindi x alla fine sara' 6 , ma non verra' visualizzato perche' il loop abbiamo deciso di fermarlo a 5 ( e in qualsiasi caso, se lo fermassimo a 6, x sarebbe 7 e via dicendo)
la sintassi per le condizioni di while e' la stessa che viene utilizzata per IF ( vedi sopra)
il loop con while puo' anche essere interrotto da un IF statement, ad esempio:
codice:
while [ condizione ]
do
statement1 #esegui fino a che la condizione e' vera oppure fino a quando non si arriva alla condizione di break
statement2
if [condizione di break]
then
break #esce dal loop
fi
statements3 #intanto che la condizione e' vera e non si e' verificata la condizione di break
done
For loop:
Quote:
il loop con for e' molto simile al loop con while m viene utilizzato, ad esempio per gli array, ed e' molto semplice da capire:
codice:
declare -a array
array[0]="ciao"
array[1]="si"
array[2]="no"
array[3]="boh"
array[4]="asdlalla"
for i in ${array[@]}
do
echo $i
done
oppure
codice:
for i in 1 2 3 4 5
do
echo $i
done
in questo caso non leggera' i valori da un array ma leggera' i lavori da noi impostati "1 2 3 4 5" e ad ogni giro visualizzera' il valore letto.
condizione tripla:
codice:
for ((VAR=0; VAR<=10; VAR++))
do
echo $VAR
done
in questo caso "for" si occupera' di fare la conta da 0 a 10 e poi si fermera' poiche' noi gli abbiamo detto:
VAR=0, ossia impostiamo VAR a zero inizialmente
VAR<=10, ossia diciamo a "for" di fermarsi con la conta a 10
VAR++, ossia diciamo a "for" di incrementare di una unita' VAR ad ogni giro
Case statement:
Quote:
personalmente lo uso per creare script interattivi, quindi, in base all'input lo script esegue uno o una serie di comandi prestabiliti.
Esempio pratico:
codice:
echo "scelte disponibili"
echo "1 - ciao"
echo "2 - buona sera"
echo "3 - buona giornata"
echo -n "digita un numero [ 1 - 3 ] : "
read choice
case $choice in
1)
echo "hai scelto 1, CIAO"
;;
2)
echo "hai scelto 2, BUONA SERA"
;;
3)
echo "hai scelto 3, BUONA GIORNATA"
esac
ovviamente potete inserire infinite opzioni , non solo 3
spiegazione dell'esempio:
echo -n ---> visualizza un messaggio e attende l'input dell'utente
read choice ---> legge l'input dell'utente e lo importa in una variabile
codice:
case $choice in
1)
;;
2)
;;
3)
esac
legge la variabile $choice ed esegue il o i comandi elencati nel rispettivo paragrafo
per ora direi che vi ho infarinato abbastanza ma appena possibile cerchero' di aggiornarla e aggiungere altre spiegazioni!
ricordatevi sempre che la shell stessa ha una funzione importante, ossia "man".
Escludendo gli statement e la sintassi, per qualsiasi altro binario, come ad esempio "cat" o "ls" o "sed" , per ottenere informazioni dettagliate sull'utilizzo, vi bastera' digitare
ad esempio man ls
divertitevi! ;)