Progetto Bash: introduzione: I parametri posizionali.
La scelta che dobbiamo fare nello scrivere questi post è tra il rigore scientifico e la semplicità; Dato che quello che stiamo facendo non è un corso accademico, ci permettiamo di optare per la semplicità. Il Progetto Bash non ha la pretesa di essere esaustivo in toto, ma semplicemente invogliare chiunque a cimentarsi con il linguaggio di programmazione bash. :D :D
Circa le variabili, mi rimane da dire un'ultima cosa, cioè come assegnare un valore ad una variabile ed esportarla contemporaneamente
La sintassi è la seguente
export nome_variabile=valore
Facciamo un esempio, apriamo il terminale e scriviamo
export nome="marco"
e premiamo invio
se poi vado a scrivere
echo $nome
mi verrà restituito il valore assegnato; non solo nella shell ma anche nella sottoshell come visto nel post precedente (qui)
Ci sarebbero da dire tantissime altre cose sulle variabili, ma per il momento ci fermiamo qui, salvo ulteriori approfondimenti in futuro.
Passiamo ai parametri posizionali.
I parametri posizionali altro non sono che dei numeri che vanno da 1 a 9; nel caso di numeri a due cifre, esso deve essere racchiuso tra parentesi graffe {N}
Il parametro va inserito nello script e deve essere preceduto dal $
Es.
$1 #primo parametro
$2 #secondo parametro
$3 #terzo parametro e via dicendo.
nel caso invece si tratti di numero con più di una cifra, avremo
${10}
${11} # e via dicendo
Quando vado a lanciare lo script, insieme al suo nome (es. script.sh) introdurrò, nella shell, anche l'argomento ( o gli argomenti; che devono essere tanti quanto sono i parametri posizionale); l'argomento può consistere in un nome, numero o altro.
se N è un numero superiore a 9, esso dovrà essere racchiuso tra parentesi graffa; avremo così, ad es.
${10}
Vi ricordate cos'è una variabile?
nome_variabile=valore
La variabile è un contenitore cui attraverso "=" assegniamo un valore (un contenuto)
così
nome="marco"
e se facciamo
echo $nome
la shell ci restituirà a video il valore che gli abbiamo assegnato.
Il $ ha un preciso compito, cioè di espandere una variabile, un parametro.
abbiamo detto che nome="marco"
quando vado a fare echo $nome, il dollaro espanderà la variabile, cioè ne restituirà il valore che gli abbiamo assegnato. Questo concetto è essenziale! In altri termini, il $ farà "sputare" alla variabile ciò che gli abbiamo dato in pasto; se alla variabile "nome" gli abbiamo dato in pasto "marco" il $ glielo farà "vomitare". Chiaro!!
Col parametro posizionale avviene la stessa cosa, cambia solo il modo in cui avviene l'assegnazione del valore.
Facciamo un esempio
costruiamo uno script semplice semplice
#!/bin/bash
#dati anagrafici
echo "il nome dello script è $0"
nome=$1
cognome=$2
eta=$3
echo "il tuo nome è $1"
echo "il tuo cognome è $2"
echo "la tua età è $3"
echo "Hai passato $# parametri/o"
exit 0
salviamo sulla scrivania il testo in dati_anagrafici.sh
apriamo il terminale e con
cd Scrivania
spostiamoci sulla scrivania
Rendiamo eseguibile lo script
chmod +x dati_anagrafici.sh
lanciamo lo script
./dati_anagrafici.sh vostro_nome vostro_cognome vostra_eta
ad es.
./dati_anagrafici.sh paolo rossi 38
Avete capito ora come si assegna il valore al parametro posizionale?
Da riga di comando!!!
l'argomento "nome" andrà a riempire la scatoletta $1
l'argomento "cognome" andrà a riempire la scatoletta $2
l'argomento "età" andrà a riempire la scatoletta $3
ci resta da capire il compito di $#
beh, questo conterà il numero dei parametri posizionali presenti nello script e ci restituirà, grazie ad echo, il risultato.
Dimenticavo, c'è anche $0
Se apro una shell e scrivo
echo $0
ci verrà restituito il nome della shell
Mentre se lo inserisco in uno script, ci restituirà il nome dello script
come è avvenuto nello script sopra
echo "il nome dello script è $0"
Io e Lightuono
PS1. Come avete avuto modo di vedere, abbiamo dotato il "Progetto Bash" dell'indice. L'indice è stato introdotto sia sul mio blog (in alto a destra) che su quello dell'amico Lightuono.
PS2. Vi prego caldamente, qualora abbiate deciso di seguire il "Progetto Bash", di leggere la parte pratica, splendidamente curata dal Maestro Lightuono :)) Troverete i link ai suoi post nell'indice.
Ecco, Squit è già in crisi.. Non capisco una cosa, Bittino: lo script come fa ad associare il valore al parametro posizionale? Da riga di comando come faccio ad associare il valore Squittymouse al parametro $1? O sto facendo solo una gran confusione???
RispondiEliminaChe la forza della scamorza sia con voi :D
RispondiElimina@Squittymouse
RispondiEliminaIl primo valore dopo il nome dello script si associa al primo parametro ($1); il secondo valore al secondo parametro ($2) e così via. Es.
./script.sh primo_valore secondo_valore
$1 <------primo valore
$2<-------secondo valore
Il tutto, diciamo, in maniera automatica :D
Quando la si impara, ogni cosa appare semplice... Ho riprovato lo script e tutto è andato come doveva andare! Grazie :)
RispondiEliminaIo tardino, ma ci arrivo. Tutte le volte che son passato di qua, mai mi ero accorto di questa guida favolosa. E' esattamente quello che mi ci voleva: chiara, semplice e che sa coinvolgermi e farmi sorridere. Sto capendo persino io i parametri posizionali, non ci credo.
RispondiEliminaSe faceste un manuale con questa "atmosfera", con questi "toni", sarebbe senza dubbio un successone; parola.
Grazie! :-) Cerchiamo di fare del nostro meglio e qualche volta ci riusciamo pure :D
Eliminadeduco che i parametri posizionali sono gli argomenti da linea di comando!! Quelli che in programmazione si trovano in argv ..
RispondiEliminaSi, proprio quelli :)
Eliminae dillo prima no!! :D
Eliminama nel post lo dico...alla fine :D
Elimina