Funzionalità di base della shell

()

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:

  1. 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.
  2. 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 ).
  3. Analizza i token in comandi semplici e composti (vedi Comandi della shell ).
  4. 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.
  5. Esegue tutti i reindirizzamenti necessari (vedi Reindirizzamenti ) e rimuove gli operatori di reindirizzamento e i relativi operandi dall’elenco degli argomenti.
  6. Esegue il comando (vedi Esecuzione dei comandi ).
  7. 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 \newlineviene 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_MESSAGESe , come spiegato di seguito. TEXTDOMAINConsulta la documentazione di gettext per ulteriori dettagli. Se la locale corrente è CPOSIX, 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 TEXTDOMAINvariabile shell, eventualmente aggiungendo un suffisso di ‘.mo‘. Se si utilizza la TEXTDOMAINvariabile, potrebbe essere necessario impostare la TEXTDOMAINDIRvariabile sulla posizione dei file del catalogo messaggi. Altri ancora usano entrambe le variabili in questo modo: TEXTDOMAINDIRLC_MESSAGES/LC_MESSAGES/ TEXTDOMAIN.mo.


3.1.3 Commenti

In una shell non interattiva, o in una shell interattiva in cui è abilitata l’ interactive_commentsopzione 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.

/ 5
Grazie per aver votato!

How useful was this post?

Click on a star to rate it!

Average rating / 5. Vote count:

No votes so far! Be the first to rate this post.

As you found this post useful...

Follow us on social media!

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?