<Precedenti | Contenuti | Succ.>
Assegnazione di valori a variabili e costanti
È qui che la nostra conoscenza dell'espansione inizia davvero a dare i suoi frutti. Come abbiamo visto, alle variabili vengono assegnati valori in questo modo:
variabile=APPREZZIAMO
where variabile è il nome della variabile e APPREZZIAMO è una stringa. A differenza di altri linguaggi di programmazione, alla shell non interessa il tipo di dati assegnati a una variabile; li tratta tutti come stringhe. Puoi forzare la shell a limitare l'assegnazione a numeri interi usando il tasto dichiarare comando con il -i opzione, ma, come l'impostazione delle variabili in sola lettura, questa operazione viene eseguita raramente.
Si noti che in un'assegnazione non devono esserci spazi tra il nome della variabile, il segno di uguale e il valore. Quindi in cosa può consistere il valore? Tutto ciò che possiamo espandere in una stringa:
a=z
b="una stringa"
c="una stringa e $b"
d=$(ls -l foo.txt) e=$((5 * 7)) f="\t\ta stringa\n"
# Assegna la stringa "z" alla variabile a.
# Gli spazi incorporati devono essere tra virgolette.
# Altre espansioni come le variabili possono essere
# espanso nel compito.
# Risultati di un comando.
# Espansione aritmetica.
# Sequenze di escape come tab e newline.
a=z
b="una stringa"
c="una stringa e $b"
d=$(ls -l foo.txt) e=$((5 * 7)) f="\t\ta stringa\n"
L'assegnazione di più variabili può essere eseguita su una singola riga:
a=5 b="una stringa"
a=5 b="una stringa"
Durante l'espansione, i nomi delle variabili possono essere racchiusi tra parentesi graffe facoltative "{}". Ciò è utile nei casi in cui il nome di una variabile diventa ambiguo a causa del suo contesto circostante.
testo. Qui, proviamo a cambiare il nome di un file da il mio file a miofile1, utilizzando una variabile:
[io@linuxbox~]$ nomefile="miofile" [io@linuxbox~]$ tocca $nomefile [io@linuxbox~]$ mv $nomefile $nomefile1
mv: manca l'operando del file di destinazione dopo `myfile' Provare `mv --help' per maggiori informazioni.
[io@linuxbox~]$ nomefile="miofile" [io@linuxbox~]$ tocca $nomefile [io@linuxbox~]$ mv $nomefile $nomefile1
mv: manca l'operando del file di destinazione dopo `myfile' Provare `mv --help' per maggiori informazioni.
Questo tentativo fallisce perché la shell interpreta il secondo argomento del mv comando come una nuova (e vuota) variabile. Il problema può essere superato in questo modo:
[io@linuxbox~]$ mv $nomefile ${nomefile}1
[io@linuxbox~]$ mv $nomefile ${nomefile}1
Aggiungendo le parentesi graffe circostanti, la shell non interpreta più il finale 1 come parte del nome della variabile.
Cogliamo l'occasione per aggiungere alcuni dati al nostro rapporto, vale a dire la data e l'ora in cui è stato creato il rapporto e il nome utente del creatore:
#! / Bin / bash
# Programma per generare una pagina di informazioni di sistema TITLE="Rapporto informazioni di sistema per $HOSTNAME"
CURRENT_TIME=$(data +"%x %r %Z")
TIMESTAMP="Generato $CURRENT_TIME, da $USER"
eco "
$TITLE
$TITLE
$TIMESTAMP
"
#! / Bin / bash
# Programma per generare una pagina di informazioni di sistema TITLE="Rapporto informazioni di sistema per $HOSTNAME"
CURRENT_TIME=$(data +"%x %r %Z")
TIMESTAMP="Generato $CURRENT_TIME, da $USER"
eco "
$TITLE
$TITLE
$TIMESTAMP
"