
Le variabili sono fondamentali se vuoi scrivere script e capire cosa farà quel codice che intendi tagliare e incollare dal Web sul tuo computer Linux. Ti iniziare!
Variabili 101
Le variabili sono denominate simboli che rappresentano una stringa o un valore numerico. Quando li usi in comandi ed espressioni, vengono trattati come se tu avessi digitato il valore che detengono invece del nome della variabile.
Per creare una variabile, basta fornire un nome e un valore per essa. I nomi delle variabili devono essere descrittivi e ricordare il valore che contengono. Un nome di variabile non può iniziare con un numero, né può contenere spazi. Tuttavia, può iniziare con un carattere di sottolineatura. Oltre a ciò, è possibile utilizzare qualsiasi combinazione di caratteri alfanumerici maiuscoli e minuscoli.
Esempi
Qui creeremo cinque variabili. Il formato è digitare il nome, il segno di uguale =
e il valore. Nota che non esiste uno spazio prima o dopo il segno di uguale. Dare un valore a una variabile viene spesso definito come assegnazione un valore per la variabile.
Creeremo quattro variabili stringa e una variabile numerica, this_year:
me=Dave
my_boost=Linux
him=Popeye
his_boost=Spinach
this_year=2019
Per vedere il valore contenuto in una variabile, utilizzare il echo
comando. Devi precedere il nome della variabile con un simbolo di dollaro $
ogni volta che fai riferimento al valore che contiene, come mostrato di seguito:
echo $my_name
echo $my_boost
echo $this_year
Usiamo tutte le nostre variabili contemporaneamente:
echo "$my_boost is to $me as $his_boost is to $him (c) $this_year"
I valori delle variabili sostituiscono i loro nomi. Puoi anche cambiare i valori delle variabili. Per assegnare un nuovo valore alla variabile, my_boost
, ripeti semplicemente ciò che hai fatto quando hai assegnato il suo primo valore, in questo modo:
my_boost=Tequila
Se si esegue nuovamente il comando precedente, si ottiene ora un risultato diverso:
echo "$my_boost is to $me as $his_boost is to $him (c) $this_year"
Pertanto, è possibile utilizzare lo stesso comando che fa riferimento alle stesse variabili e ottenere risultati diversi se si modificano i valori conservati nelle variabili.
Parleremo di citare le variabili in seguito. Per ora, ecco alcune cose da ricordare:
- Una variabile tra virgolette singole
'
viene trattato come una stringa letterale e non come una variabile. - Variabili tra virgolette
"
sono trattati come variabili. - Per ottenere il valore trattenuto in una variabile, è necessario fornire il simbolo del dollaro
$
. - Una variabile senza il simbolo del dollaro
$
fornisce solo il nome della variabile.
Puoi anche creare una variabile che prende il suo valore da una variabile esistente o da un numero di variabili. Il seguente comando definisce una nuova variabile chiamata drink_of_the_Year,
e gli assegna i valori combinati di my_boost
e this_year
variabili:
drink_of-the_Year="$my_boost $this_year"
echo drink_of_the-Year
Come utilizzare le variabili negli script
Gli script verrebbero completamente bloccati senza variabili. Le variabili offrono la flessibilità che rende uno script una soluzione generale, piuttosto che specifica. Per illustrare la differenza, ecco uno script che conta i file nel file /dev
directory.
Digita questo in un file di testo, quindi salvalo come fcnt.sh
(per “conteggio file”):
#!/bin/bash folder_to_count=/dev file_count=$(ls $folder_to_count | wc -l) echo $file_count files in $folder_to_count
Prima di poter eseguire lo script, è necessario renderlo eseguibile, come mostrato di seguito:
chmod +x fcnt.sh
Digitare quanto segue per eseguire lo script:
./fcnt.sh
Questo stampa il numero di file nel file /dev
directory. Ecco come funziona:
- Una variabile chiamata
folder_to_count
è definito ed è impostato per contenere la stringa “/ dev”. - Un'altra variabile, chiamata
file_count
, è definito. Questa variabile prende il suo valore dalla sostituzione di un comando. Questa è la frase di comando tra parentesi$( )
. Nota che c'è un segno di dollaro$
prima della prima parentesi. Questo costrutto$( )
valuta i comandi tra parentesi e quindi restituisce il loro valore finale. In questo esempio, quel valore è assegnato afile_count
variabile. Per quanto riguarda ilfile_count
la variabile è interessata, ha superato un valore da conservare; non si preoccupa di come è stato ottenuto il valore. - Il comando valutato nella sostituzione comando esegue un
ls
elenco dei file nella directory infolder_to_count
variabile, che è stata impostata su “/ dev”. Quindi, lo script esegue il comando “ls / dev”. - L'output di questo comando viene reindirizzato nel file
wc
comando. Il-l
(conteggio righe) cause dell'opzionewc
per contare il numero di righe nell'output dal filels
comando. Poiché ogni file è elencato su una riga separata, questo è il conteggio di file e sottodirectory nella directory “/ dev”. Questo valore è assegnato afile_count
variabile. - L'ultima riga usa l'eco per produrre il risultato.
Ma questo funziona solo per la directory “/ dev”. Come possiamo far funzionare lo script con qualsiasi directory? Tutto ciò che serve è un piccolo cambiamento.
Come utilizzare i parametri della riga di comando negli script
Molti comandi, come ls
e wc
, accetta i parametri della riga di comando. Questi forniscono informazioni al comando, quindi sa cosa vuoi che faccia. Se vuoi ls
per lavorare sulla tua home directory e anche per mostrare i file nascosti, puoi usare il seguente comando, dove la tilde ~
e il -a
(tutte) le opzioni sono i parametri della riga di comando:
ls ~ -a
I nostri script possono accettare i parametri della riga di comando. Sono indicati come $1
per il primo parametro, $2
come il secondo, e così via, fino a $9
per il nono parametro. (In realtà, c'è un $0
, anche, ma è riservato per mantenere sempre la sceneggiatura.)
Puoi fare riferimento ai parametri della riga di comando in uno script come faresti con le normali variabili. Modifichiamo il nostro script, come mostrato di seguito, e salviamolo con il nuovo nome fcnt2.sh
:
#!/bin/bash folder_to_count=$1 file_count=$(ls $folder_to_count | wc -l) echo $file_count files in $folder_to_count
Questa volta, il folder_to_count
alla variabile viene assegnato il valore del primo parametro della riga di comando, $1
.
Il resto della sceneggiatura funziona esattamente come prima. Piuttosto che una soluzione specifica, il tuo script è ora generale. Puoi usarlo su qualsiasi directory perché non è hardcoded per funzionare solo con “/ dev”.
Ecco come rendere eseguibile lo script:
chmod +x fcnt2.sh
Ora provalo con alcune directory. Puoi fare prima “/ dev” per assicurarti di ottenere lo stesso risultato di prima. Digita quanto segue:
./fnct2.sh /dev
./fnct2.sh /etc
./fnct2.sh /bin
Si ottiene lo stesso risultato (207 file) di prima per la directory “/ dev”. Ciò è incoraggiante e si ottengono risultati specifici della directory per ciascuno degli altri parametri della riga di comando.
Per abbreviare lo script, è possibile rinunciare alla variabile, folder_to_count
, nel complesso, e solo riferimento $1
dappertutto, come segue:
#!/bin/bash file_count=$(ls $1 wc -l) echo $file_count files in $1
Lavorare con variabili speciali
Abbiamo citato $0
, che è sempre impostato sul nome file dello script. Ciò ti consente di utilizzare lo script per fare cose come stampare correttamente il suo nome, anche se è stato rinominato. Ciò è utile nelle situazioni di registrazione, in cui si desidera conoscere il nome del processo che ha aggiunto una voce.
Di seguito sono riportate le altre variabili predefinite speciali:
- $ #: Quanti parametri della riga di comando sono stati passati allo script.
- $ @: Tutti i parametri della riga di comando passati allo script.
- $?: Lo stato di uscita dell'ultimo processo da eseguire.
- $$: L'ID processo (PID) dello script corrente.
- $ USER: Il nome utente dell'utente che esegue lo script.
- $ HOSTNAME: Il nome host del computer che esegue lo script.
- $ SECONDI: Il numero di secondi per cui lo script è in esecuzione.
- $ RANDOM: Restituisce un numero casuale.
- $ LINENO: Restituisce il numero di riga corrente dello script.
Vuoi vederli tutti in una sceneggiatura, vero? Puoi! Salvare quanto segue come file di testo chiamato, special.sh
:
#!/bin/bash echo "There were $# command line parameters" echo "They are: $@" echo "Parameter 1 is: $1" echo "The script is called: $0" # any old process so that we can report on the exit status pwd echo "pwd returned $?" echo "This script has Process ID $$" echo "The script was started by $USER" echo "It is running on $HOSTNAME" sleep 3 echo "It has been running for $SECONDS seconds" echo "Random number: $RANDOM" echo "This is line number $LINENO of the script"
Digitare quanto segue per renderlo eseguibile:
chmod +x special.sh
Ora puoi eseguirlo con una serie di parametri della riga di comando diversi, come mostrato di seguito.
variabili ambientali
Bash utilizza le variabili di ambiente per definire e registrare le proprietà dell'ambiente che crea all'avvio. Queste informazioni di conservazione possono essere facilmente accessibili a Bash, come nome utente, impostazioni locali, numero di comandi che può contenere il file della cronologia, editor predefinito e molto altro.
Per vedere le variabili d'ambiente attive nella tua sessione Bash, usa questo comando:
env | less
Se scorri l'elenco, potresti trovarne alcuni che potrebbero essere utili come riferimento nei tuoi script.
Come esportare variabili
Quando viene eseguito uno script, si trova nel suo stesso processo e le variabili che utilizza non possono essere visualizzate al di fuori di tale processo. Se si desidera condividere una variabile con un altro script avviato dallo script, è necessario esportare quella variabile. Ti mostreremo come farlo con due script.
Innanzitutto, salvare quanto segue con il nome file script_one.sh
:
#!/bin/bash first_var=alpha second_var=bravo # check their values echo "$0: first_var=$first_var, second_var=$second_var" export first_var export second_var ./script_two.sh # check their values again echo "$0: first_var=$first_var, second_var=$second_var"
Questo crea due variabili, first_var
e second_var
e assegna alcuni valori. Li stampa sulla finestra del terminale, esporta le variabili e chiama script_two.sh
. quando script_two.sh
termina e il flusso di processo ritorna a questo script, stampa nuovamente le variabili nella finestra del terminale. Quindi, puoi vedere se sono cambiati.
Il secondo script che useremo è script_two.sh
. Questa è la sceneggiatura che script_one.sh
chiamate. Digita quanto segue:
#!/bin/bash # check their values echo "$0: first_var=$first_var, second_var=$second_var" # set new values first_var=charlie second_var=delta # check their values again echo "$0: first_var=$first_var, second_var=$second_var"
Questo secondo script stampa i valori delle due variabili, assegna loro nuovi valori e quindi li stampa di nuovo.
Per eseguire questi script, è necessario digitare quanto segue per renderli eseguibili:
chmod +x script_one.sh chmod +x script_two.sh
E ora, digitare quanto segue per avviare script_one.sh
:
./script_one.sh
Questo è ciò che ci dice l'output:
- script_one.sh stampa i valori delle variabili, che sono alfa e bravo.
- script_two.sh stampa i valori delle variabili (alfa e bravo) così come li ha ricevuti.
- script_two.sh li cambia in charlie e delta.
- script_one.sh stampa i valori delle variabili, che sono ancora alfa e bravo.
Quello che succede nel secondo script, rimane nel secondo script. È come se le copie delle variabili vengano inviate al secondo script, ma vengono eliminate quando lo script viene chiuso. Le variabili originali nel primo script non sono modificate da qualsiasi cosa accada alle loro copie nel secondo.
Come citare le variabili
Avrai notato che quando gli script fanno riferimento a variabili, sono tra virgolette "
. Ciò consente di fare riferimento correttamente alle variabili, quindi i loro valori vengono utilizzati quando la riga viene eseguita nello script.
Se il valore assegnato a una variabile include spazi, devono essere racchiusi tra virgolette quando vengono assegnati alla variabile. Questo perché, per impostazione predefinita, Bash utilizza uno spazio come delimitatore.
Ecco un esempio:
site_name=How-To Geek
Bash vede lo spazio prima di “Geek” come un'indicazione dell'avvio di un nuovo comando. Segnala che non esiste tale comando e abbandona la linea. echo
ci mostra che il site_name
la variabile non contiene nulla, nemmeno il testo “How-To”.
Riprova con le virgolette attorno al valore, come mostrato di seguito:
site_name="How-To Geek"
Questa volta, viene riconosciuto come valore singolo e assegnato correttamente a site_name
variabile.
echo è tuo amico
Può richiedere del tempo per abituarsi a comandare la sostituzione, citando le variabili e ricordando quando includere il simbolo del dollaro.
Prima di premere Invio ed eseguire una riga di comandi Bash, provalo con echo
davanti ad esso. In questo modo, puoi assicurarti che ciò che accadrà è ciò che desideri. Puoi anche rilevare eventuali errori che potresti aver commesso nella sintassi.