lunedì 13 giugno 2011

Progetto Bash: Introduzione. Terza Parte.

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.

10 commenti:

  1. 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???

    RispondiElimina
  2. Che la forza della scamorza sia con voi :D

    RispondiElimina
  3. @Squittymouse
    Il 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

    RispondiElimina
  4. Quando la si impara, ogni cosa appare semplice... Ho riprovato lo script e tutto è andato come doveva andare! Grazie :)

    RispondiElimina
  5. Io 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.
    Se faceste un manuale con questa "atmosfera", con questi "toni", sarebbe senza dubbio un successone; parola.

    RispondiElimina
    Risposte
    1. Grazie! :-) Cerchiamo di fare del nostro meglio e qualche volta ci riusciamo pure :D

      Elimina
  6. deduco che i parametri posizionali sono gli argomenti da linea di comando!! Quelli che in programmazione si trovano in argv ..

    RispondiElimina