Il simbolo back slash “\” può essere usato per disattivare gli effetti speciali di qualsiasi carattere singolo dopo il carattere back slash. Ad esempio, se volessimo assegnare alla variabile di shell la stringa “a b” non potremmo farlo usando l'assegnazione
v1=a b
infatti il comando
echo $v1 produce il seguente risultato: bash: b: command not found
Abbiamo già visto perché ciò succede. Avremmo dovuto scrivere v1=”a b”
Volendo invece evitare gli apice possiamo scrivere v1= a\ b
Il comando echo $v1 restituisce l'output a b
E' importante notare che le stringhe possono essere presentate alla shell più di una volta, nel qual caso può essere necessario usare il carattere “\” per proteggere gli apici che potrebbero assumere un significato importante. Consideriamo il seguente esempio:
Vogliamo eseguire il comando
echo la data di oggi è `date` Vediamo il suo output
la data di oggi è dom giu 5 19:09:53 CEST 2005
Il comando echo che abbiamo eseguito visualizza sullo schermo (lo standard output) la stringa o le stringhe che seguono. Nel nostro caso, la stringa era composta da due parti:
1.
la data di oggi è 2. `date`Quando la shell incontra la stringa `date' racchiusa tra back quotes, cosa fa? Esegue il comando date, ed ottiene l'output dom giu 5 19:09:53 CEST 2005
che sostituirà al posto di `date`
Quindi formerà la stringa completa concatenando le due parti: “La data di oggi è” + “dom giu 5 19:09:53 CEST 2005”
Questa stringa così formata sarà l'argomento del comando echo
echo La data di oggi è dom giu 5 19:09:53 CEST 2005
Ora, complichiamo un poco le cose. Memorizziamo il comando
echo La data di oggi è `date`
in una variabile ambientale, che possiamo chiamare proprio “comando” comando=echo La data di oggi è `date`
Il primo errore che abbiamo commesso è che non abbiamo racchiuso la stringa tra apici. Cosa succede se usiamo i doppi apici per delimitare la stringa?
comando=”echo La data di oggi è `date`”
Proviamo a visualizzare il contenuto della variabile comando
echo $comando
echo La data di oggi è dom giu 5 19:22:18 CEST 2005
schermo dovrebbero cambiare. Vediamo se succede, Ripetiamo il comando:
echo $comando Il risultato sarà
echo La data di oggi è dom giu 5 19:22:18 CEST 2005 Perché la data e l'ora visualizzata non cambiano?
E poi, c'è qualche cosa di strano in questo comando! Analizziamo per primo la cosa strana. Noi abbiamo creato un comando che dovrebbe visualizzare la data e l'ora usando il comando echo, o, almeno, queste erano le nostre intenzioni. Ora invece il comando echo viene visualizzato come parte del messaggio sullo schermo.
echo La data di oggi è dom giu 5 19:22:18 CEST 2005
La seconda cosa che vogliamo spiegarci è che la data e l'ora non cambiano, anche se eseguiamo più volte il comando
echo $comando
Questo è semplice da spiegare. Quando viene eseguita l'assegnazione comando=”echo La data di oggi è `date'”
il comando date, racchiuso tra back quotes viene eseguito, e la data e l'ora che restituisce viene sostituito alla stringa `date'
Quindi, in effetti, la nostra variabile comando conterrà sempre la data che è stata restituita la prima volta che è stata eseguita l'assegnazione.
comando=”echo La data di oggi è `date`”
Per fare in modo poi che il comando ”echo La data di oggi è `date`” venga valutato come comando, costituito da echo + frase + date, dobbiamo usare, come abbiamo imparato, i back quotes:
comando=`echo La data di oggi è `date`` Eseguiamo il comando
echo $comando
Ed ecco l'output prodotto
La data di oggi è dom giu 5 19:44:24 CEST 2005
Come si vede, abbiamo risolto il problema, almeno il primo.
Supponiamo si voler creare un comando che visualizzi la directory corrente. Memorizziamo il comando in una variabile di shell:
msg=`echo La tua directory corrente è \`pwd\`` e facciamolo eseguire:
echo $msg
La tua directory corrente è /home/padrone/tmp
Alla fine la variabile si shell $msg rappresenta la lista di argomenti del comando echo La tua directory corrente è `pwd`
L'effetto di tutto ciò è di impostare la variabile ambientale cms ad una stringa di caratteri, ad esempio “La tua directory corrente è /home/padrone/tmp”
Notiamo che se cambiamo la directory corrente con il comando cd, la variabile di shell cmd contiene sempre il nome della vecchia directory corrente, ed abbiamo visto il perché.
Una stringa può essere costruita concatenando variabili di shell o concatenando altre stringhe e variabili di shell.
Ad esempio, creiamo le due variabili di shell
x=fred
y=paola
Creiamo poi la variabile di shell z come concatenazione delle variabili x ed y:
z=$x$y
Il comando
echo $z visualizza il contenuto della variabile di shell z:
echo “La nuova variabile contiene la stringa “$z
Il risultato sarà
La nuova variabile contiene la stringa fredpaola
Con questa operazione abbiamo concatenato due variabili di shell
Se scriviamo
z=”La nuova stringa contiene ”$x$y
Può essere necessario, a volte, circondare il nome della variabile di shell (dopo il segno di dollaro) con parentesi graffe. In tal modo i nomi di variabili possono essere correttamente riconosciuti.
Consideriamo il seguente esempio:
x=fred y=joe
z=$x$y
Supponiamo di voler creare una nuova variabile u, concatenando la variabile di shell x con la stringa “erick” Se scriviamo
u=$xerick
facciamo un errore. Proviamo a visualizzare la variabile u con il comando echo
echo $u
Dopo che questo comando è stato eseguito, sul video non comparirà niente. Ciò si spiega facilmente.
Con l'assegnazione u=$xerick assegniamo alla variabile u il contenuto della variabile xerick, che non abbiamo mai creato, e che quindi assume il valore null.
Potremmo scrivere allora
u=$x”erick”
cioè concatenare una variabile di shell con una stringa
oppure usare una diversa notazione, cioè racchiudere il nome della variabile x tra parentesi graffe
u=${x}erick
echo $z $u
Questo comando produce le stringhe fredjoe frederick
Le parentesi graffe sono esplicitamente richieste quando il simbolo immediatamente seguente è parte valida del nome del nome di una variabile di shell, cioè una lettera, un numero o il carattere underscore “_”
.
SCRIPTING LANGUAGE
I linguaggi di scripting (chiamati anche comunemente linguaggi di programmazione di scripting o linguaggi di script) sono linguaggi di programmazione per computer progettati per "scripting" l'operazione di un computer. I primi linguaggi di scripting erano spesso chiamati linguaggi di batch o linguaggi per il controllo dei lavori (job control languages). Uno script è solitamente interpretato più che compilato, ma non sempre.
Nelle applicazioni per computer, uno script è un programma per computer che automatizza il tipo di lavoro che un utente altrimenti dovrebbe fare interattivamente tramite tastiera. Uno script di shell spesso consiste largamente di una sorta di comandi che dovrebbero essere scritti al prompt di comandi, o in un programma di word processing un utente dovrebbe scrivere uno script che potrebbe combinare una sequenza di compiti di editing che l'utente si aspetta di compiere ripetutamente. Molti di tali linguaggi sono abbastanza sofisticati, e sono stati usati per scrivere programmi elaborati, che spesso sono chiamati script anche se essi vanno oltre l'automazione di semplici sequenze di compiti dell'utente.
Descrizione
I linguaggi per il computer sono creati per vari scopi e compiti – differenti tipi e stili di programmazione. Un comune compito di programmazione è noto come scripting, o connessione di diversi componenti pre-esistenti per svolgere un nuovo compito correlato. Questi linguaggi rivolti allo scripting sono tipicamente chiamati linguaggi di scripting (scripting languages). Molti linguaggi per questo scopo hanno proprietà in comune: favoriscono lo sviluppo rapido sull'efficienza di esecuzione; sono spesso implementati con interpreti piuttosto che con compilatori e sono forti nella comunicazione con componenti software scritti in altri linguaggi.
Molti linguaggi di scripting emersero come strumenti per l'esecuzione di compiti non ripetitivi, particolarmente nell'amministrazione dei sistemi. Un modo di guardare agli script è coma se fosse la colla che mette insieme parecchi componenti; perciò sono ampiamente utilizzati per la creazione di interfacce grafiche utente (GUI). Gli script vengono tipicamente memorizzati solo in formato testo (come ASCII) ed interpretati, o (come con il linguaggio Perl) compilati ogni volta che vengono richiamati.
Alcuni linguaggi di scripting sono progettati per un dominio specifico, ma spesso è possibile scrivere programmi più generali in quel linguaggio. IN molti progetti di larga scala, un linguaggio di scripting ed un linguaggio di programmazione di livello più basso sono usati insieme, ognuno portando i suoi principali punti di forza per risolvere specifici problemi. I linguaggi di scripting sono spesso progettati per l'utilizzo interattivo, avendo molti comandi che possono essere eseguiti individualmente, e spesso hanno operazioni di altissimo livello (per esempio, nella classica shell di UNIX (sh), molte operazioni sono esse stesse dei programmi).
Tali comandi ad alto livello semplificano il processo della scrittura di codice. Caratteristiche di programmazione come gestione automatica della memoria e controllo dei limiti possono essere considerati come garantiti. In un linguaggio non di scripting, o di più basso livello, la gestione della memoria e delle variabili e la creazione di strutture dati tende a sprecare più tempo di programmazione e linee di codice per completare un compito assegnato.
molto più piccoli di, diciamo, un equivalente file di programma scritto in linguaggio C. L'altro lato della medaglia potrebbe essere una penalizzazione della performance: i linguaggi di scripting, spesso interpretati, possono essere significativamente più lenti da eseguire e possono consumare più memoria quando sono in esecuzione. In molti casi rilevanti, comunque, ad esempio con piccoli script di alcune decine di righe, il vantaggio del tempo di scrittura supera lo svantaggio del tempo di esecuzione.
Ad ogni modo, il limite tra linguaggi di scripting e linguaggi di programmazione regolare tende ad essere vago.