Bash è l’acronimo di ‘Bourne-Again Shell‘. La shell Bourne è la tradizionale shell Unix originariamente scritta da Stephen Bourne. Tutti i comandi incorporati della shell Bourne sono disponibili in Bash, Le regole per la valutazione e la quotazione sono prese dalla specifica POSIX per la shell Unix ‘standard’.
Questo capitolo riassume brevemente i “blocchi di costruzione” della shell: comandi, strutture di controllo, funzioni della shell, parametri della shell, espansioni della shell, reindirizzamenti , che sono un modo per dirigere input e output da e verso file con nome e come la shell esegue i comandi.
• Sintassi della shell | Cosa significa il tuo input per la shell. | |
• Comandi della shell | I tipi di comandi che puoi utilizzare. | |
• Funzioni della shell | Raggruppamento dei comandi per nome. | |
• Parametri della shell | Come la shell memorizza i valori. | |
• Espansioni della shell | Come Bash espande i parametri e le varie espansioni disponibili. | |
• Reindirizzamenti | Un modo per controllare dove vanno l’input e l’output. | |
• Esecuzione dei comandi | Cosa succede quando esegui un comando. | |
• Script di shell | Esecuzione di file di comandi shell. |
3.1 Sintassi della shell
• Operazione shell | Il funzionamento di base della shell. | |
• Citando | Come rimuovere il significato speciale dai caratteri. | |
• Commenti | Come specificare i commenti. |
Quando la shell legge l’input, procede attraverso una sequenza di operazioni. Se l’input indica l’inizio di un commento, la shell ignora il simbolo del commento (‘#‘), e il resto di quella riga.
Altrimenti, grosso modo, la shell legge il suo input e divide l’input in parole e operatori, utilizzando le regole di virgolette per selezionare quali significati assegnare a varie parole e caratteri.
La shell quindi analizza questi token in comandi e altri costrutti, rimuove il significato speciale di determinate parole o caratteri, ne espande altri, reindirizza input e output secondo necessità, esegue il comando specificato, attende lo stato di uscita del comando e rende disponibile tale stato di uscita per ulteriore ispezione o elaborazione.
3.1.1 Operazione shell
Quella che segue è una breve descrizione dell’operazione della shell quando legge ed esegue un comando. Fondamentalmente, la shell fa quanto segue:
- Legge il suo input da un file (vedi Shell Scripts ), da una stringa fornita come argomento al file-Copzione di chiamata (vedi Invocare Bash ) o dal terminale dell’utente.
- Suddivide l’input in parole e operatori, obbedendo alle regole di virgolette descritte in Citazione . Questi token sono separati da
metacharacters
. L’espansione dell’alias viene eseguita in questo passaggio (vedere Alias ). - Analizza i token in comandi semplici e composti (vedi Comandi della shell ).
- Esegue le varie espansioni della shell (vedi Espansioni della shell ), suddividendo i token espansi in elenchi di nomi di file (vedi Espansione del nome del file ) e comandi e argomenti.
- Esegue tutti i reindirizzamenti necessari (vedi Reindirizzamenti ) e rimuove gli operatori di reindirizzamento e i relativi operandi dall’elenco degli argomenti.
- Esegue il comando (vedi Esecuzione dei comandi ).
- Facoltativamente attende il completamento del comando e ne raccoglie lo stato di uscita (vedi Stato di uscita ).
3.1.2 Citazione
• Carattere di escape | Come rimuovere il significato speciale da un singolo carattere. | |
• Citazioni singole | Come inibire ogni interpretazione di una sequenza di caratteri. | |
• Doppie virgolette | Come sopprimere la maggior parte dell’interpretazione di una sequenza di caratteri. | |
• Citazione ANSI-C | Come espandere le sequenze ANSI-C in stringhe tra virgolette. | |
• Traduzione locale | Come tradurre stringhe in diverse lingue. |
Le virgolette vengono utilizzate per rimuovere il significato speciale di determinati caratteri o parole nella shell. Le virgolette possono essere utilizzate per disabilitare il trattamento speciale per i caratteri speciali, per evitare che le parole riservate vengano riconosciute come tali e per impedire l’espansione dei parametri.
Ciascuno dei metacaratteri della shell (vedi Definizioni ) ha un significato speciale per la shell e deve essere citato se vuole rappresentare se stessa. Quando vengono utilizzate le funzionalità di espansione della cronologia dei comandi (vedi Interazione della cronologia ), il carattere di espansione della cronologia , di solito ‘!‘, deve essere citato per impedire l’espansione della cronologia. Vedi Bash History Facilities , per maggiori dettagli sull’espansione della cronologia.
Esistono tre meccanismi di virgolette: il carattere di escape , le virgolette singole e le virgolette doppie.
3.1.2.1 Carattere di escape
Una barra rovesciata non quotata ‘\‘ è il personaggio di fuga di Bash. Mantiene il valore letterale del carattere successivo, ad eccezione di newline
. Se \newline
viene visualizzata una coppia e la barra rovesciata stessa non è tra virgolette, \newline
viene trattata come una continuazione di riga (ovvero viene rimossa dal flusso di input ed effettivamente ignorata).
3.1.2.2 Quotazioni singole
Racchiudere i caratteri tra virgolette singole (‘‘‘) conserva il valore letterale di ogni carattere tra virgolette. Una singola virgoletta potrebbe non essere presente tra virgolette singole, anche se preceduta da una barra rovesciata.
3.1.2.3 virgolette doppie
Racchiudere i caratteri tra virgolette (‘“‘) conserva il valore letterale di tutti i caratteri tra virgolette, ad eccezione di ‘$‘, ‘`‘, ‘\‘ e, quando l’espansione della cronologia è abilitata, ‘!‘. Quando la shell è in modalità POSIX (vedi Bash POSIX Mode ), il ‘!‘ non ha alcun significato speciale tra virgolette, anche quando l’espansione della cronologia è abilitata. I personaggi ‘$‘ e ‘`‘ conservano il loro significato speciale tra virgolette (vedi Espansioni della shell ). La barra rovesciata conserva il suo significato speciale solo se seguita da uno dei seguenti caratteri: ‘$‘, ‘`‘, ‘“‘, ‘\‘, o newline
. Tra virgolette doppie, le barre inverse seguite da uno di questi caratteri vengono rimosse. Le barre inverse che precedono i caratteri senza un significato speciale non vengono modificate. Una doppia virgoletta può essere citata tra virgolette facendola precedere da una barra rovesciata. Se abilitata, l’espansione della cronologia verrà eseguita a meno che un ‘!‘ che appare tra virgolette doppie viene evitato utilizzando una barra rovesciata. La barra rovesciata che precede il ‘!‘ non viene rimosso.
I parametri speciali ‘*‘ e ‘@‘ ha un significato speciale quando è tra virgolette (vedi Espansione dei parametri della shell ).
3.1.2.4 Citazione ANSI-C
Le parole della forma sono trattate in modo speciale. La parola si espande in string , con i caratteri con escape barra rovesciata sostituiti come specificato dallo standard ANSI C. Le sequenze di escape della barra rovesciata, se presenti, vengono decodificate come segue: $'string'
\a
avviso (campana)\b
spazio indietro\e\E
,
un carattere di escape (non ANSI C)\f
,
feed di moduli\n
,
nuova linea\r
,
ritorno in carrozza\t
,
linguetta orizzontale\v
,
linguetta verticale\\
,
barra rovesciata\'
,
citazione singola\"
doppia citazione\?
,
punto interrogativo\nnn
,
il carattere a otto bit il cui valore è il valore ottale nnn (da una a tre cifre ottali)\xHH
il carattere a otto bit il cui valore è il valore esadecimale HH (una o due cifre esadecimali)\uHHHH
il carattere Unicode (ISO/IEC 10646) il cui valore è il valore esadecimale HHHH (da una a quattro cifre esadecimali)\UHHHHHHHH
il carattere Unicode (ISO/IEC 10646) il cui valore è il valore esadecimale HHHHHHHH (da una a otto cifre esadecimali)\cx
un carattere control- x
Il risultato ampliato è tra virgolette singole, come se il segno del dollaro non fosse stato presente.
3.1.2.5 Traduzione specifica per la locale
Una stringa tra virgolette preceduta da un segno di dollaro (‘$‘) farà sì che la stringa venga tradotta in base alla locale corrente. L’ infrastruttura gettext esegue la ricerca e la traduzione nel catalogo dei messaggi, utilizzando le variabili della shell LC_MESSAGES
e , come spiegato di seguito. TEXTDOMAIN
Consulta la documentazione di gettext per ulteriori dettagli. Se la locale corrente è C
o POSIX
, o se non sono disponibili traduzioni, il simbolo del dollaro viene ignorato. Se la stringa viene tradotta e sostituita, la sostituzione è tra virgolette doppie.
Alcuni sistemi utilizzano il catalogo dei messaggi selezionato dalla LC_MESSAGES
variabile della shell. Altri creano il nome del catalogo messaggi dal valore della TEXTDOMAIN
variabile shell, eventualmente aggiungendo un suffisso di ‘.mo‘. Se si utilizza la TEXTDOMAIN
variabile, potrebbe essere necessario impostare la TEXTDOMAINDIR
variabile sulla posizione dei file del catalogo messaggi. Altri ancora usano entrambe le variabili in questo modo: TEXTDOMAINDIR
/ LC_MESSAGES
/LC_MESSAGES/ TEXTDOMAIN
.mo.
3.1.3 Commenti
In una shell non interattiva, o in una shell interattiva in cui è abilitata l’ interactive_comments
opzione per il shopt
builtin (vedi The Shopt Builtin ), una parola che inizia con ‘#‘ fa sì che quella parola e tutti i caratteri rimanenti su quella riga vengano ignorati. Una shell interattiva senza l’ interactive_comments
opzione abilitata non consente commenti. L’ interactive_comments
opzione è attiva per impostazione predefinita nelle shell interattive. Vedere Shell interattive , per una descrizione di ciò che rende interattiva una shell.