Skip to main content

Ash - Comando Linux

Antiguo Tutorial Scriptin g Shell /B ash Capítulo 1.Introduccion. (Giugno 2026)

Antiguo Tutorial Scriptin g Shell /B ash Capítulo 1.Introduccion. (Giugno 2026)
Anonim

NOME

sh - command interpreter (shell)

SINOSSI

sh -/ + ACefnuvxIimqsVEbc -o LongName -words bersaglio …

DESCRIZIONE

Sh è l'interprete di comandi standard per il sistema. La versione corrente dish è in procinto di essere cambiato per conformarsi alPOSIX Specifiche 1003.2 e 1003.2a per la shell. Questa versione ha molte caratteristiche che la rendono simile sotto alcuni aspetti alla shell Korn, ma non è un clone della shell Korn (vedi ksh (1)). Solo le funzioni designate daPOSIX più alcune estensioni di Berkeley, vengono incorporate in questa shell. Ci aspettiamo chePOSIX conformità al tempo 4.4 BSD è rilasciato. Questa pagina man non intende essere un'esercitazione o una specifica completa della shell.

Panoramica

La shell è un comando che legge le righe da un file o dal terminale, li interpreta e generalmente esegue altri comandi. È il programma in esecuzione quando un utente accede al sistema (sebbene un utente possa selezionare una shell diversa con il comando chsh (1)). La shell implementa un linguaggio con costrutti di controllo del flusso, una funzione macro che offre una varietà di funzionalità oltre all'archiviazione dei dati, oltre a funzionalità integrate di modifica della cronologia e della riga. Incorpora molte funzionalità per aiutare l'uso interattivo e ha il vantaggio che il linguaggio interpretativo è comune all'uso sia interattivo che non interattivo (script di shell). Cioè, i comandi possono essere digitati direttamente sulla shell in esecuzione o possono essere inseriti in un file e il file può essere eseguito direttamente dalla shell.

Invocazione

Se non ci sono argomenti e se lo standard input della shell è connesso ad un terminale (o se il -iola bandiera è impostata), e il -c l'opzione non è presente, la shell è considerata una shell interattiva. Una shell interattiva richiede in genere prima di ogni comando e gestisce gli errori di programmazione e comando in modo diverso (come descritto di seguito). Al primo avvio, la shell controlla l'argomento 0 e se inizia con un trattino `- 'anche la shell è considerata una shell di login. Normalmente questo viene fatto automaticamente dal sistema quando l'utente esegue il login. Una shell di login legge prima i comandi dai file / etc / profile e .profile se esistono. Se la variabile di ambienteENV è impostato sulla voce di una shell, o è impostato nel file .profile di una shell di login, la shell successiva legge i comandi dal file chiamato inENVPertanto, un utente deve inserire comandi che devono essere eseguiti solo al momento del login nel file .profile e comandi che vengono eseguiti per ogni shell all'interno delENV file. Per impostare ilENV variabile su qualche file, inserisci la seguente riga nel tuo .profile della tua home directory

ENV = $ HOME / .shinit; esportazione ENV

sostituendo ".shinit" qualsiasi nome di file che si desidera. Dal momento che ilENV il file viene letto per ogni chiamata della shell, inclusi gli script di shell e le shell non interattive, il seguente paradigma è utile per limitare i comandi nelENV file per invocazioni interattive. Inserisci i comandi all'interno di `` case '' e `` esac '' sotto (questi comandi sono descritti in seguito):

caso $ - in * i *)

# comandi solo per uso interattivo

esac

Se sono stati specificati gli argomenti della riga di comando oltre alle opzioni, la shell considera il primo argomento come il nome di un file da cui leggere i comandi (uno script di shell) e gli argomenti rimanenti sono impostati come parametri posizionali della shell ($ 1 , $ 2, ecc.). Altrimenti, la shell legge i comandi dal suo input standard.

Elaborazione lista argomenti

Tutte le opzioni a singola lettera hanno un nome corrispondente che può essere usato come argomento per il -o opzione. Il set -o il nome viene fornito accanto all'opzione di lettera singola nella descrizione seguente. Specificando un trattino `` - '' attiva l'opzione, mentre l'uso di un + `` + '' disabilita l'opzione. Le seguenti opzioni possono essere impostate dalla riga di comando o con il set (1) incorporato (descritto più avanti).

-un allexport

Esporta tutte le variabili assegnate a. (UNIMPLEMENTED for 4.4alpha)

-c

Leggi i comandi dalla riga di comando. Nessun comando verrà letto dallo standard input.

-C noclobber

Non sovrascrivere i file esistenti con ``> '' (UNIMPLEMENTED for 4.4alpha)

-e errexit Lo

Se non interattivo, uscire immediatamente se un comando non verificato fallisce. Lo stato di uscita di un comando viene considerato esplicitamente testato se il comando viene utilizzato per controllare unSe elifwhile ofino a o se il comando è l'operando di sinistra di un operatore `` && '' o `` || ''.

-f noglob

Disabilita l'espansione del nome del percorso.

-n noexec

Se non interattivo, leggi i comandi ma non li esegui. Questo è utile per verificare la sintassi degli script di shell.

-u nounset

Scrivi un messaggio all'errore standard quando tenti di espandere una variabile che non è impostata, e se la shell non è interattiva, esci immediatamente. (UNIMPLEMENTED for 4.4alpha)

-v verboso

La shell scrive il suo input sull'errore standard mentre viene letto. Utile per il debug.

-X xtrace

Scrivi ogni comando sull'errore standard (preceduto da un `+ 'prima che venga eseguito. Utile per il debug.

-q quietprofile

Se la -v o -X le opzioni sono state impostate, non le applicano durante la lettura dei file di inizializzazione, essendo / etc / profile .profile e il file specificato dalENV variabile d'ambiente.

-IO ignoreeof

Ignora EOF dall'input quando interattivo.

-io interattivo

Forza la shell a comportarsi in modo interattivo.

-m tenere sotto controllo

Attivare il controllo dei lavori (impostare automaticamente quando interattivo).

-S stdin

Leggi i comandi dallo standard input (imposta automaticamente se non sono presenti argomenti file). Questa opzione non ha effetto quando è impostata dopo che la shell è già stata avviata (cioè con set (1)).

-V VI

Abilita l'editor di riga di comando vi (1) integrato (disabilita -E se è stato impostato).

-E emacs

Abilita l'editor da riga di comando incorporato emacs (1) (disabilita -V se è stato impostato).

-b notificare

Abilita la notifica asincrona del completamento del processo in background. (UNIMPLEMENTED for 4.4alpha)

Struttura lessicale

La shell legge l'input in termini di righe da un file e lo suddivide in parole nello spazio bianco (spazi vuoti e tabulazioni) e in certe sequenze di caratteri che sono speciali per la shell denominate "operatori". Esistono due tipi di operatori: operatori di controllo e operatori di reindirizzamento (il loro significato è discusso più avanti). Di seguito è riportato un elenco di operatori:

"Operatori di controllo:"

& && ( ) ; ;; | ||

"Operatore di reindirizzamento:"

< > >| << >> <& >& <<- <>

citando

La citazione viene utilizzata per rimuovere il significato speciale di alcuni caratteri o parole nella shell, ad esempio operatori, spazi bianchi o parole chiave. Esistono tre tipi di quotazione: virgolette singole abbinate, virgolette doppie abbinate e barra rovesciata.

Barra rovesciata

Un backslash conserva il significato letterale del seguente carattere, ad eccezione di Aq newline. Una barra retroversa che precede una nuova riga Aq viene considerata come una continuazione della riga.

Citazioni singole

Racchiudere i caratteri tra virgolette singole mantiene il significato letterale di tutti i caratteri (eccetto le virgolette singole, rendendo impossibile mettere le virgolette singole in una stringa a virgolette singole).

Virgolette

Racchiudere i caratteri tra virgolette conserva il significato letterale di tutti i caratteri eccetto il simbolo ($) e la barra rovesciata ($). La barra rovesciata tra virgolette è storicamente strana e serve solo per citare i seguenti caratteri:

$ `

Altrimenti rimane letterale.

Parole riservate

Le parole riservate sono parole che hanno un significato speciale per la shell e sono riconosciute all'inizio di una riga e dopo un operatore di controllo. Le seguenti sono parole riservate:

! Taelif Ta fi Ta mentre Ta caso

altro Taper Ta poi Ta {Ta}

fai Tafatto Ta fino a Ta se Ta Esac

Il loro significato è discusso più tardi.

alias

Un alias è un nome e un set di valori corrispondente usando il comando built alias (1). Ogni volta che si verifica una parola riservata (vedi sopra), e dopo aver controllato le parole riservate, la shell controlla la parola per vedere se corrisponde ad un alias. Se lo fa, lo sostituisce nel flusso di input con il suo valore. Ad esempio, se c'è un alias chiamato "lf" con il valore "ls -F", quindi l'input:

Se il foobar

potrebbe diventare

ls -F foobar

Gli alias rappresentano un modo conveniente per gli utenti ingenui di creare abbreviazioni per i comandi senza dover imparare come creare funzioni con argomenti. Possono anche essere usati per creare codice lessicalmente oscuro. Questo uso è scoraggiato.

comandi

La shell interpreta le parole che legge in base a un linguaggio, la cui specifica è al di fuori dello scopo di questa pagina man (fare riferimento al BNF nelPOSIX Documento 1003.2). In sostanza, tuttavia, viene letta una riga e se la prima parola della riga (o dopo un operatore di controllo) non è una parola riservata, la shell ha riconosciuto un comando semplice. Altrimenti, potrebbe essere stato riconosciuto un comando complesso o qualche altro costrutto speciale.

Comandi semplici

Se è stato riconosciuto un comando semplice, la shell esegue le seguenti azioni:

  1. Le parole principali del modulo `` nome = valore '' vengono eliminate e assegnate all'ambiente del comando semplice. Gli operatori di reindirizzamento e i relativi argomenti (come descritto di seguito) vengono rimossi e salvati per l'elaborazione.

  2. Le parole rimanenti vengono espanse come descritto nella sezione chiamata "Espansioni" e la prima parola rimanente è considerata il nome del comando e il comando si trova. Le parole rimanenti sono considerate gli argomenti del comando. Se il nome del comando non risulta, le assegnazioni di variabili `` name = value '' riconosciute nell'elemento 1 influiscono sulla shell corrente.

  3. I reindirizzamenti vengono eseguiti come descritto nella prossima sezione.

reindirizzamenti

I reindirizzamenti sono usati per cambiare dove un comando legge il suo input o invia il suo output. In generale, i reindirizzamenti aprono, chiudono o duplicano un riferimento esistente in un file. Il formato generale utilizzato per il reindirizzamento è:

n file redir-op

dove redir-op è uno degli operatori di reindirizzamento menzionati in precedenza. Di seguito è riportato un elenco dei possibili reindirizzamenti. Il Bq n è un numero opzionale, come in `3 '(non` Bq 3' che si riferisce a un descrittore di file.

n> file

Reindirizza l'output standard (o n) sul file.

n> | file

Lo stesso, ma ignora il -C opzione.

n >> file

Aggiungi l'output standard (o n) al file.

n <file

Reindirizza lo standard input (o n) dal file.

n1 <& n2

Duplicato input standard (o n1) dal descrittore di file n2.

n <& -

Chiudi input standard (o n).

n1> & n2

Duplicato output standard (o n1) da n2.

n> & -

Chiudi lo standard output (o n).

n <> file

Apri file per leggere e scrivere su input standard (o n).

Il seguente reindirizzamento è spesso chiamato "documento qui"

n << delimitatore

qui-doc-text …

delimitatore

Tutto il testo sulle righe successive fino al delimitatore viene salvato e reso disponibile per il comando sullo standard input o sul descrittore di file n se specificato.Se il delimitatore specificato nella riga iniziale è quotato, il testo qui-doc viene trattato letteralmente, altrimenti il ​​testo è soggetto all'espansione dei parametri, alla sostituzione dei comandi e all'espansione aritmetica (come descritto nella sezione su "Espansioni") 'Se l'operatore è `` << -' 'invece di ``' 'allora le linguette iniziali nel testo qui-doc vengono rimosse.

Ricerca ed esecuzione

Esistono tre tipi di comandi: funzioni shell, comandi incorporati e programmi normali - e il comando viene cercato (per nome) in questo ordine. Ognuno di loro viene eseguito in un modo diverso.

Quando viene eseguita una funzione shell, tutti i parametri posizionali della shell (ad eccezione di $ 0, che rimane invariato) vengono impostati sugli argomenti della funzione shell. Le variabili che vengono posizionate esplicitamente nell'ambiente del comando (assegnando loro assegnazioni prima del nome della funzione) sono rese locali alla funzione e sono impostate sui valori dati. Quindi viene eseguito il comando indicato nella definizione della funzione. I parametri posizionali vengono ripristinati ai loro valori originali al termine del comando. Tutto ciò si verifica all'interno della shell corrente.

I builtin della shell vengono eseguiti internamente alla shell, senza generare un nuovo processo.

Altrimenti, se il nome del comando non corrisponde a una funzione o builtin, il comando viene cercato come un normale programma nel filesystem (come descritto nella prossima sezione). Quando viene eseguito un programma normale, la shell esegue il programma, passando gli argomenti e l'ambiente al programma. Se il programma non è un file eseguibile normale (ad esempio, se non inizia con il "numero magico" di cuiASCII la rappresentazione è "#!", quindi execve (2) restituisce Er ENOEXEC quindi) la shell interpreterà il programma in una subshell. In questo caso, la shell secondaria si reinizializzerà, in modo che l'effetto sarà come se una nuova shell fosse stata invocata per gestire lo script della shell ad-hoc, tranne per il fatto che la posizione dei comandi hash nella shell padre verrà ricordata dal bambino.

Si noti che le versioni precedenti di questo documento e il codice sorgente stesso si riferiscono in modo fuorviante e sporadico a uno script di shell senza numero magico come "procedura di shell".

Ricerca del percorso

Quando si localizza un comando, la shell prima cerca di vedere se ha una funzione di shell con quel nome. Quindi cerca un comando incorporato con quel nome. Se non viene trovato un comando incorporato, accade una delle due cose:

  1. I nomi dei comandi contenenti una barra vengono semplicemente eseguiti senza eseguire ricerche.

  2. La shell cerca ogni voce inSENTIERO a sua volta per il comando. Il valore delSENTIEROvariabile dovrebbe essere una serie di voci separate da due punti. Ogni voce è composta da un nome di directory. La directory corrente può essere indicata implicitamente da un nome di directory vuoto o esplicitamente da un singolo punto.

Comando Esci Stato

Ogni comando ha uno stato di uscita che può influenzare il comportamento di altri comandi della shell. Il paradigma è che un comando termina con zero per normale o successo e non zero per errore, errore o indicazione errata. La pagina man per ciascun comando dovrebbe indicare i vari codici di uscita e il loro significato. Inoltre, i comandi incorporati restituiscono i codici di uscita, così come una funzione di shell eseguita.

Comandi complessi

I comandi complessi sono combinazioni di comandi semplici con operatori di controllo o parole riservate, creando insieme un comando complesso più grande. Più in generale, un comando è uno dei seguenti:

  • comando semplice
  • conduttura
  • lista o elenco composto
  • comando composto
  • definizione della funzione

Salvo diversa indicazione, lo stato di uscita di un comando è quello dell'ultimo comando semplice eseguito dal comando.

Condotte

Una pipeline è una sequenza di uno o più comandi separati dall'operatore di controllo |. L'output standard di tutto tranne l'ultimo comando è collegato all'ingresso standard del comando successivo. L'output standard dell'ultimo comando è ereditato dalla shell, come al solito.

Il formato per una pipeline è:

! comando1 | comando2 …

L'output standard di comando1 è collegato all'ingresso standard di comando2. L'input standard, l'output standard o entrambi di un comando viene considerato assegnato dalla pipeline prima di qualsiasi reindirizzamento specificato dagli operatori di reindirizzamento che fanno parte del comando.

Se la pipeline non è in background (discusso più avanti), la shell attende che tutti i comandi siano completati.

Se la parola riservata! non precede la pipeline, lo stato di uscita è lo stato di uscita dell'ultimo comando specificato nella pipeline. In caso contrario, lo stato di uscita è il NOT logico dello stato di uscita dell'ultimo comando. Cioè, se l'ultimo comando restituisce zero, lo stato di uscita è 1; se l'ultimo comando restituisce maggiore di zero, lo stato di uscita è zero.

Poiché l'assegnazione della pipeline di input standard o output standard o entrambi avviene prima del reindirizzamento, può essere modificata tramite reindirizzamento. Per esempio:

$ comando1 2> & 1 | comando2

invia sia l'output standard che l'errore standard di command1 allo standard input di command2.

A; o il terminatore fa in modo che la precedente lista AND-OR (descritta di seguito) sia eseguita in sequenza; a & provoca l'esecuzione asincrona della precedente lista AND-OR.

Si noti che a differenza di altre shell, ogni processo nella pipeline è figlio della shell di richiamo (a meno che non sia incorporato nella shell, nel qual caso viene eseguito nella shell corrente, ma qualsiasi effetto che ha sull'ambiente viene cancellato).

Comandi in background -

Se un comando viene terminato dall'operatore di controllo ampersand (&), la shell esegue il comando in modo asincrono, ovvero la shell non attende il termine del comando prima di eseguire il comando successivo.

Il formato per l'esecuzione di un comando in background è:

comando1 e comando2 & …

Se la shell non è interattiva, l'input standard di un comando asincrono è impostato su / dev / null

Elenchi - Generalmente parlando

Una lista è una sequenza di zero o più comandi separati da una nuova riga, un punto e virgola o una e commerciale e, facoltativamente, terminati da uno di questi tre caratteri. I comandi in una lista vengono eseguiti nell'ordine in cui sono scritti. Se il comando è seguito da una e commerciale, la shell avvia il comando e procede immediatamente al prossimo comando; altrimenti attende che il comando termini prima di passare al successivo.

Operatori di lista di corto circuito

`` && '' e `` || '' sono operatori di elenco AND-OR. `` && '' esegue il primo comando, quindi esegue il secondo comando se lo stato di uscita del primo comando è zero. `` || '' è simile, ma esegue il secondo comando se lo stato di uscita del primo comando è diverso da zero. `` && '' e `` || '' hanno entrambi la stessa priorità.

Costrutti di controllo del flusso - se, mentre, per, caso

La sintassi del comando if è

se la lista

quindi elencare

lista elif

quindi elenca …

altro elenco

fi

La sintassi del comando while è

mentre lista

fare la lista

fatto

I due elenchi vengono eseguiti ripetutamente mentre lo stato di uscita del primo elenco è zero. Il comando until è simile, ma ha la parola fino al posto di while, il che lo fa ripetere finché lo stato di uscita della prima lista è zero.

La sintassi del comando for è

per variabile in word …

fare la lista

fatto

Le parole vengono espanse e quindi la lista viene eseguita ripetutamente con la variabile impostata su ogni parola a turno. il fare e il fare possono essere sostituiti con `` {'' e ``} ''

La sintassi del comando break e continue è

pausa num

continua num

La pausa termina il numero più interno per o durante i cicli. Continua continua con la successiva iterazione del ciclo più interno. Questi sono implementati come comandi incorporati.

La sintassi del comando case è

caso in parola

modello) elenco ;;

esac

Il pattern può essere in realtà uno o più pattern (vedi Pattern di shell descritti più avanti), separati da caratteri `` ''.

Raggruppamento di comandi insieme

I comandi possono essere raggruppati scrivendo entrambi

(elenco)

o

{ elenco;

Il primo di questi esegue i comandi in una subshell. I comandi incorporati raggruppati in un (elenco) non influiscono sulla shell corrente. La seconda forma non fora un altro guscio quindi è leggermente più efficiente. Raggruppando i comandi insieme in questo modo è possibile reindirizzare i loro output come se fossero un unico programma:

{printf ciao; printf world n ";}> saluto

funzioni

La sintassi di una definizione di funzione è

comando name ()

Una definizione di funzione è un'istruzione eseguibile; una volta eseguito, installa una funzione denominata name e restituisce uno stato di uscita pari a zero. Il comando è normalmente una lista racchiusa tra `` {'' e ``} ''

Le variabili possono essere dichiarate come locali a una funzione utilizzando un comando locale. Questo dovrebbe apparire come prima affermazione di una funzione e la sintassi è

locale variabile | - …

Locale è implementato come comando incorporato.

Quando una variabile è resa locale, eredita il valore iniziale ed esporta i flag dalla variabile con lo stesso nome nello scope circostante, se ce n'è uno. Altrimenti, la variabile inizialmente non è impostata. La shell utilizza l'ambito dinamico, in modo che se si effettua la variabile x local per la funzione f, che quindi chiama la funzione g, i riferimenti alla variabile x fatta all'interno di g si riferiranno alla variabile x dichiarata all'interno di f, non alla variabile globale denominata x .

L'unico parametro speciale che può essere reso locale è `` - '' Rendendo `` - '' local le eventuali opzioni della shell modificate tramite il comando set all'interno della funzione da ripristinare ai loro valori originali quando la funzione ritorna.

La sintassi del comando di ritorno è

ritorno exitstatus

Termina la funzione attualmente in esecuzione. Il ritorno è implementato come comando incorporato.

Variabili e parametri

La shell mantiene un insieme di parametri. Un parametro denotato da un nome è chiamato una variabile. All'avvio, la shell trasforma tutte le variabili d'ambiente in variabili di shell. Nuove variabili possono essere impostate utilizzando il modulo

nome = valore

Le variabili impostate dall'utente devono avere un nome costituito esclusivamente da caratteri alfabetici, numerici e caratteri di sottolineatura, il primo dei quali non deve essere numerico. Un parametro può anche essere indicato da un numero o da un carattere speciale come spiegato di seguito.

Parametri posizionali

Un parametro posizionale è un parametro denotato da un numero (n> 0). La shell li imposta inizialmente sui valori degli argomenti della riga di comando che seguono il nome dello script della shell. È anche possibile utilizzare il set (1) incorporato per impostarli o ripristinarli.

Parametri speciali

Un parametro speciale è un parametro indicato da uno dei seguenti caratteri speciali. Il valore del parametro è elencato accanto al suo carattere.

*

Si espande ai parametri posizionali, a partire da uno. Quando l'espansione avviene all'interno di una stringa con doppia quotatura, si espande in un singolo campo con il valore di ciascun parametro separato dal primo carattere delIFS variabile, o da a SeIFS è disinserito.

@

Si espande ai parametri posizionali, a partire da uno.Quando l'espansione avviene tra virgolette doppie, ciascun parametro posizionale si espande come argomento separato. Se non ci sono parametri posizionali, l'espansione di @ genera argomenti zero, anche quando @ è double-quoted. Ciò che questo significa, per esempio, è se $ 1 è "abc" e $ 2 è "def ghi", quindi Qq $ @ si espande nei due argomenti:

abc def ghi

#

Si espande al numero di parametri posizionali.

?

Si espande allo stato di uscita della pipeline più recente.

- (trattino.)

Si espande ai flag di opzione correnti (i nomi di opzioni a singola lettera concatenati in una stringa) come specificato in invocazione, dal comando incorporato set o implicitamente dalla shell.

$

Si espande nell'ID di processo della shell invocata. Una subshell conserva lo stesso valore di $ come genitore.

!

Si espande all'ID di processo del comando di sfondo più recente eseguito dalla shell corrente. Per una pipeline, l'ID del processo è quello dell'ultimo comando nella pipeline.

0 (zero.)

Si espande al nome della shell o dello script di shell.

Espansioni di parole

Questa clausola descrive le varie espansioni che vengono eseguite sulle parole. Non tutte le espansioni vengono eseguite su ogni parola, come spiegato più avanti.

Espansioni di tilde, espansioni di parametri, sostituzioni di comandi, espansioni aritmetiche e rimozioni di quotazioni che si verificano all'interno di una singola parola espandono in un singolo campo. È solo l'espansione del campo o l'espansione del percorso che può creare più campi da una singola parola. L'unica eccezione a questa regola è l'espansione del parametro speciale @ tra virgolette doppie, come descritto sopra.

L'espansione della parola d'ordine è:

  1. Espansione dei Tilde, Espansione dei Parametri, Sostituzione dei Comandi, Espansione Aritmetica (questi si verificano tutti nello stesso momento).

  2. La divisione del campo viene eseguita sui campi generati dal punto (1) a meno che ilIFS la variabile è nulla.

  3. Espansione del percorso (se non impostato -f è in vigore).

  4. Citazione rimozione.

Il carattere $ viene utilizzato per introdurre l'espansione dei parametri, la sostituzione dei comandi o la valutazione aritmetica.

Tilde Expansion (sostituendo la home directory di un utente)

Una parola che inizia con un carattere tilde non quotato (~) è soggetta a espansione tilde. Tutti i caratteri fino a una barra (/) o alla fine della parola sono considerati come un nome utente e vengono sostituiti con la home directory dell'utente. Se manca il nome utente (come in ~ / foobar) la tilde viene sostituita con il valore di CASA variabile (la home directory dell'utente corrente).

Espansione dei parametri

Il formato per l'espansione dei parametri è il seguente:

$ {Espressione}

dove expression è costituito da tutti i caratteri fino a quando il matching ``} '' Any ``} '' scappato da una barra rovesciata o all'interno di una stringa quotata, e i caratteri nelle espansioni aritmetiche incorporate, sostituzioni di comando ed espansioni variabili, non vengono esaminati nel determinare il corrispondenza ``} ''

La forma più semplice per l'espansione dei parametri è:

$ {Parametro}

Il valore, se esiste, del parametro è sostituito.

Il nome o il simbolo del parametro può essere racchiuso tra parentesi, che sono facoltative ad eccezione dei parametri posizionali con più di una cifra o quando il parametro è seguito da un carattere che può essere interpretato come parte del nome. Se si verifica un'espansione dei parametri all'interno di virgolette doppie:

  1. L'espansione del nome del percorso non viene eseguita sui risultati dell'espansione.

  2. La divisione del campo non viene eseguita sui risultati dell'espansione, ad eccezione di @.

Inoltre, un'espansione parametro può essere modificata utilizzando uno dei seguenti formati.

$ {Parametro: -word}

Utilizza valori predefiniti. Se il parametro non è impostato o è nullo, l'espansione della parola viene sostituita; altrimenti, il valore del parametro è sostituito.

$ {Parametro: = parola}

Assegna valori predefiniti. Se il parametro non è impostato o è nullo, l'espansione della parola viene assegnata al parametro. In tutti i casi, il valore finale del parametro è sostituito. Solo variabili, non parametri posizionali o parametri speciali, possono essere assegnati in questo modo.

$ {Parametro:? Word}

Indica errore se Null o Unset. Se il parametro non è impostato o è nullo, l'espansione della parola (o un messaggio che indica che non è impostato se la parola è omessa) viene scritta sull'errore standard e la shell viene chiusa con uno stato di uscita diverso da zero. Altrimenti, il valore del parametro viene sostituito. Non è necessario che una shell interattiva esca.

$ {Parametro: + word}

Usa valore alternativo. Se il parametro non è impostato o è nullo, il valore nullo viene sostituito; altrimenti, l'espansione della parola viene sostituita.

Nelle espansioni dei parametri mostrate in precedenza, l'uso dei due punti nel formato genera un test per un parametro non impostato o nullo; l'omissione del colon risulta in un test per un parametro che è solo non impostato.

$ {# Parametro}

Lunghezza della stringa. La lunghezza in caratteri del valore del parametro.

Le seguenti quattro varietà di espansione dei parametri forniscono l'elaborazione della sottostringa. In ogni caso, la notazione della corrispondenza del modello (vedere Modelli di shell), piuttosto che la notazione di espressioni regolari, viene utilizzata per valutare i modelli. Se parametro è * o @, il risultato dell'espansione non è specificato. Racchiudere la stringa di espansione del parametro completo tra virgolette non causa la citazione delle seguenti quattro varietà di caratteri del pattern, mentre la citazione di caratteri all'interno delle parentesi graffe ha questo effetto.

$ {Parametro% parola}

Rimuovi il più piccolo motivo di suffisso. La parola viene espansa per produrre un modello. L'espansione del parametro produce quindi un parametro, con la porzione più piccola del suffisso corrispondente al modello eliminato.

$ {Parametro %% parola}

Rimuovi il modello Suffix più grande.La parola viene espansa per produrre un modello. L'espansione del parametro produce quindi un parametro, con la porzione più grande del suffisso corrispondente al modello eliminato.

$ {Parametro # parola}

Rimuovi il modello di prefisso più piccolo. La parola viene espansa per produrre un modello. L'espansione del parametro produce quindi un parametro, con la parte più piccola del prefisso corrispondente al modello eliminato.

$ {Parametro di parola ##}

Rimuovi il modello di prefisso più grande. La parola viene espansa per produrre un modello. L'espansione del parametro genera quindi un parametro, con la parte più grande del prefisso corrispondente al modello eliminato.

Sostituzione del comando

La sostituzione di comando consente di sostituire l'output di un comando al posto del nome del comando stesso. La sostituzione di comando si verifica quando il comando è racchiuso come segue:

$ (Comando)

o Po `` backquoted '' versione Pc:

`comando`

La shell espande la sostituzione di comando eseguendo il comando in un ambiente di subshell e sostituendo la sostituzione di comando con lo standard output del comando, rimuovendo sequenze di uno o più s alla fine della sostituzione. (Inserito s prima della fine dell'output non vengono rimossi; tuttavia, durante la divisione del campo, possono essere tradotti in s, in base al valore diIFS e citando che è in vigore.)

Espansione aritmetica

L'espansione aritmetica fornisce un meccanismo per valutare un'espressione aritmetica e sostituirne il valore. Il formato per l'espansione aritmetica è il seguente:

$ ((Espressione))

L'espressione viene trattata come se fosse racchiusa tra virgolette, tranne per il fatto che una virgoletta all'interno dell'espressione non viene trattata in modo speciale. La shell espande tutti i token nell'espressione per l'espansione dei parametri, la sostituzione dei comandi e la rimozione delle virgolette.

Successivamente, la shell considera questa come un'espressione aritmetica e sostituisce il valore dell'espressione.

White Space Splitting (Field Splitting)

Dopo l'espansione dei parametri, la sostituzione dei comandi e l'espansione aritmetica, la shell analizza i risultati delle espansioni e delle sostituzioni che non si verificano nelle virgolette per la divisione del campo e possono generare più campi.

La shell tratta ogni personaggio delIFS come delimitatore e utilizzare i delimitatori per dividere i risultati dell'espansione parametri e la sostituzione dei comandi in campi.

Espansione del nome del percorso (Generazione del nome file)

A meno che il -f il flag è impostato, la generazione del nome del file viene eseguita al termine della divisione della parola. Ogni parola è vista come una serie di schemi, separati da barre. Il processo di espansione sostituisce la parola con i nomi di tutti i file esistenti i cui nomi possono essere formati sostituendo ogni modello con una stringa che corrisponde al modello specificato. Ci sono due restrizioni su questo: in primo luogo, un modello non può corrispondere a una stringa che contiene una barra e, secondo, un modello non può corrispondere a una stringa che inizia con un punto a meno che il primo carattere del modello non sia un punto. La prossima sezione descrive i pattern usati sia per Pathname Expansion che per il case (1).

Modelli di conchiglia

Un pattern è composto da caratteri normali, che corrispondono a se stessi e meta-caratteri. I meta-caratteri sono ``! '' `` * '' ``? '' E `` '' Questi caratteri perdono i loro significati speciali se vengono citati. Quando viene eseguita la sostituzione di comando o variabile e le virgolette o le virgolette posteriori non sono doppie, il valore della variabile o l'output del comando viene scansionato per questi caratteri e vengono trasformati in metacaratteri.

Un asterisco (`` * '') corrisponde a qualsiasi stringa di caratteri. Un punto interrogativo corrisponde a qualsiasi singolo carattere. Una parentesi sinistra (`` '') introduce una classe di caratteri. La fine della classe di caratteri è indicata da un (`` '') se manca `` '', quindi `` '' corrisponde a `` '' piuttosto che introdurre una classe di caratteri. Una classe di caratteri corrisponde a uno qualsiasi dei caratteri tra parentesi quadre. È possibile specificare un intervallo di caratteri utilizzando un segno meno. La classe di caratteri può essere completata aggiungendo un punto esclamativo al primo carattere della classe di caratteri.

Per includere un `` '' in una classe di caratteri, rendilo il primo carattere elencato (dopo il ``! '' Se esiste). Per includere un segno meno, rendi il primo o l'ultimo carattere elencati

builtins

Questa sezione elenca i comandi incorporati che sono incorporati perché devono eseguire alcune operazioni che non possono essere eseguite da un processo separato. Oltre a questi, ci sono molti altri comandi che possono essere incorporati per l'efficienza (ad esempio echo 1).

:

Un comando nullo che restituisce un valore di uscita 0 (vero).

. file

I comandi nel file specificato vengono letti ed eseguiti dalla shell.

alias nome = stringa …

Se name = stringa è specificato, la shell definisce l'alias nome con valore stringa Se solo nome è specificato, il valore dell'alias nome è stampato Senza argomenti, ilalias builtin stampa i nomi e i valori di tutti gli alias definiti (vediunalias)

bg lavoro …

Continua i lavori specificati (o il lavoro corrente se non vengono assegnati lavori) in background.

comando comando arg …

Esegui il comando incorporato specificato. (Questo è utile quando si ha una funzione di shell con lo stesso nome di un comando incorporato.)

CD elenco

Passa alla directory specificata (predefinita$ HOME) Se una voce perCDPATH appare nell'ambiente delCD comando o la variabile di shellCDPATH è impostato e il nome della directory non inizia con una barra, quindi le directory elencate inCDPATH sarà cercato per la directory specificata. Il formato diCDPATH è uguale a quello diSENTIERO In una shell interattiva, ilCD comando stamperà il nome della directory alla quale è effettivamente passato se questo è diverso dal nome che l'utente ha dato. Questi possono essere diversi o perché ilCDPATH è stato utilizzato il meccanismo o perché è stato attraversato un collegamento simbolico.

eval stringa…

Concatena tutti gli argomenti con spazi. Quindi ri-analizzare ed eseguire il comando.

exec comando arg …

A meno che il comando non venga omesso, il processo shell viene sostituito con il programma specificato (che deve essere un programma reale, non una funzione o una shell incorporata). Qualsiasi reindirizzamento sulexeci comandi sono contrassegnati come permanenti, in modo che non vengano annullati quando ilexec il comando finisce.

Uscita Valore di uscita

Termina il processo shell. Se Valore di uscita è dato che è usato come stato di uscita della shell; in caso contrario viene utilizzato lo stato di uscita del comando precedente.

esportare nome…

esportazione -p

I nomi specificati vengono esportati in modo che vengano visualizzati nell'ambiente dei comandi successivi. L'unico modo per annullare l'esportazione di una variabile è annullarlo. La shell consente di impostare il valore di una variabile nello stesso momento in cui viene esportata scrivendo

nome di esportazione = valore

Senza argomenti il ​​comando export elenca i nomi di tutte le variabili esportate. Con il -popzione specificata l'output verrà formattato adeguatamente per l'uso non interattivo.

fc-e editore primo scorso

fc -l -nr primo scorso

fc -s vecchio = new primo

Ilfc liste incorporate, o modifiche e ri-esecuzioni, comandi precedentemente inseriti in una shell interattiva.

-e editor

Usa l'editor nominato dall'editor per modificare i comandi. La stringa dell'editor è un nome di comando, soggetto alla ricerca tramiteSENTIERO variabile. Il valore nelFCEDIT variabile viene utilizzata come impostazione predefinita quando -e non è specificato. SeFCEDIT è nullo o non impostato, il valore diEDITOR la variabile è usata. SeEDITOR è nullo o non impostato, ed (1) è usato come editor.

-l (ell)

Elenca i comandi piuttosto che richiamare un editor su di essi. I comandi sono scritti nella sequenza indicata dal primo e dall'ultimo operando, come interessati da -r con ogni comando preceduto dal numero del comando.

-n

Elimina i numeri di comando quando si elenca con -l.

-r

Invertire l'ordine dei comandi elencati (con -l o modificato (con nessuno dei due -l né -S )

-S

Riesegui il comando senza richiamare un editor.

primo

scorso

Seleziona i comandi da elencare o modificare. Il numero di comandi precedenti a cui è possibile accedere è determinato dal valore diHISTSIZE variabile. Il valore di first o last o both sono uno dei seguenti:

+ Numero

Un numero positivo che rappresenta un numero di comando; i numeri di comando possono essere visualizzati conl opzione.

-numero

Un numero decimale negativo che rappresenta il comando che è stato eseguito in precedenza numero di comandi. Ad esempio, -1 è il comando immediatamente precedente.

stringa

Una stringa che indica il comando inserito più recentemente che inizia con quella stringa. Se il vecchio = nuovo operando non è specificato anche con -S la forma della stringa del primo operando non può contenere un segno di uguale incorporato.

Le seguenti variabili d'ambiente influenzano l'esecuzione di fc:

FCEDIT

Nome dell'editor da utilizzare.

HISTSIZE

Il numero di comandi precedenti accessibili.

fg lavoro

Sposta il lavoro specificato o il lavoro corrente in primo piano.

getopts optstring var

IlPOSIX getopts comando, da non confondere con il Bell Labs -derived getopt (1).

Il primo argomento dovrebbe essere una serie di lettere, ognuna delle quali può essere opzionalmente seguita da due punti per indicare che l'opzione richiede un argomento. La variabile specificata è impostata sull'opzione analizzata.

Ilgetopts comando deprecate la vecchia utility getopt (1) a causa della sua gestione degli argomenti che contengono spazi bianchi.

Ilgetopts builtin può essere usato per ottenere opzioni e i loro argomenti da una lista di parametri. Quando invocato,getopts posiziona il valore dell'opzione successiva dalla stringa di opzioni nell'elenco nella variabile di shell specificata da var ed è indice nella variabile di shellOPTIND Quando viene invocata la shell,OPTIND è inizializzato a 1. Per ogni opzione che richiede un argomento, ilgetopts builtin lo inserirà nella variabile shellOPTARG Se un'opzione non è consentita per il optstring poiOPTARG sarà disinserito.

optstring è una stringa di lettere di opzione riconosciute. Se una lettera è seguita da due punti, ci si aspetta che l'opzione abbia un argomento che può o meno separarsi dallo spazio bianco. Se non viene trovato un carattere opzionale dove previsto,getopts imposterà la variabile var a un ``? ''getopts quindi disattiveràOPTARG e scrivere l'output in errore standard. Specificando i due punti come primo carattere di optstring tutti gli errori saranno ignorati.

Un valore diverso da zero viene restituito quando viene raggiunta l'ultima opzione. Se non ci sono argomenti rimanenti,getopts sarà impostato var con l'opzione speciale, `` - '' altrimenti, verrà impostato var a ``? ''

Il seguente frammento di codice mostra come si potrebbero elaborare gli argomenti per un comando che può assumere le opzioni a e b e l'opzione c che richiede un argomento.

mentre getopts abc: ffarecaso $ f ina | b) flag = $ f ;;c) carg = $ OPTARG ;;?) echo $ USAGE; uscita 1 ;;esacfattoshift `expr $ OPTIND - 1`

Questo codice accetterà quanto segue:

cmd -acarg file di filecmd -a -c file file argcmd -carg -a file filecmd -a -carg - file file

hash -rv comando…

La shell mantiene una tabella hash che memorizza le posizioni dei comandi. Senza argomenti di sorta, ilhash comando stampa il contenuto di questa tabella. Le voci che non sono state guardate dall'ultimaCD il comando è contrassegnato da un asterisco; è possibile che queste voci non siano valide.

Con argomenti, ilhash comando rimuove i comandi specificati dalla tabella hash (a meno che non siano funzioni) e quindi li localizza. Con il -v opzione, l'hash stampa le posizioni dei comandi nel momento in cui li trova. Il -r l'opzione fa sì che il comando hash cancelli tutte le voci nella tabella hash ad eccezione delle funzioni.

jobid lavoro

Stampa gli id ​​di processo dei processi nel lavoro. Se la lavoro l'argomento è omesso, viene utilizzato il lavoro corrente.

lavori

Questo comando elenca tutti i processi in background che sono figli del processo corrente della shell.

pwd

Stampa la directory corrente. Il comando incorporato può differire dal programma con lo stesso nome perché il comando incorporato ricorda quale sia la directory corrente invece di ricomporla ogni volta. Questo lo rende più veloce. Tuttavia, se la directory corrente viene rinominata, la versione integrata dipwd continuerà a stampare il vecchio nome per la directory.

leggere-p richiesta -r variabile…

Il prompt viene stampato se il -p l'opzione è specificata e lo standard input è un terminale. Quindi una riga viene letta dallo standard input. La riga finale finale viene eliminata dalla riga e la linea viene divisa come descritto nella sezione sulla divisione delle parole sopra e i pezzi vengono assegnati alle variabili in ordine. Almeno una variabile deve essere specificata. Se ci sono più pezzi di variabili, i pezzi rimanenti (insieme ai caratteri inIFS che li ha separati) sono assegnati all'ultima variabile. Se ci sono più variabili che pezzi, alle restanti variabili viene assegnata la stringa nulla. Illeggere builtin indicherà il successo a meno che EOF non venga rilevato sull'input, nel qual caso viene restituito un errore.

Di default, a meno che ilr l'opzione è specificata, la barra rovesciata `` '' funge da carattere di escape, causando il seguente carattere da trattare letteralmente. Se una barra rovesciata è seguita da una nuova riga, la barra rovesciata e la nuova riga verranno eliminate.

sola lettura nome…

readonly -p

I nomi specificati sono contrassegnati come di sola lettura, in modo che non possano essere successivamente modificati o non impostati. La shell consente di impostare il valore di una variabile nello stesso momento in cui viene contrassegnato come letto solo da scrittura

readonly nome = valore

Senza argomenti il ​​comando readonly elenca i nomi di tutte le variabili di sola lettura. Con il -p opzione specificata l'output verrà formattato adeguatamente per l'uso non interattivo.

impostato { -opzioni | + opzioni | - arg …

Ilimpostato comando esegue tre diverse funzioni.

Senza argomenti, elenca i valori di tutte le variabili di shell.

Se vengono fornite le opzioni, imposta i flag di opzione specificati o li cancella come descritto nella sezione chiamata Sx Argument List Processing.

Il terzo uso del comando set è di impostare i valori dei parametri posizionali della shell sugli argomenti specificati. Per cambiare i parametri posizionali senza modificare alcuna opzione, usa `` - '' come primo argomento da impostare. Se non ci sono argomenti, il comando set cancellerà tutti i parametri posizionali (equivalente all'esecuzione di `` shift $ # '').

valore variabile

Assegna valore alla variabile. (In generale è meglio scrivere variabile = valore piuttosto che usaresetvar setvarè destinato ad essere utilizzato in funzioni che assegnano valori a variabili i cui nomi sono passati come parametri.)

cambio n

Sposta i parametri posizionali n volte. UNcambio imposta il valore di $1 al valore di $2 il valore di $2 al valore di $3 e così via, diminuendo il valore di $# da uno. Se n è maggiore del numero di parametri posizionali,cambio emetterà un messaggio di errore e uscirà con lo stato di ritorno 2.

volte

Stampa l'utente e i tempi di sistema accumulati per la shell e per i processi eseguiti dalla shell. Lo stato di ritorno è 0.

trappola azione segnale…

Causa la shell per analizzare ed eseguire l'azione quando viene ricevuto uno dei segnali specificati. I segnali sono specificati dal numero del segnale. Se segnale è0 l'azione viene eseguita allo scadere della shell. azione può essere nullo o `` - '' il primo fa sì che il segnale specificato venga ignorato e quest'ultimo causa l'azione di default da intraprendere. Quando la shell si stacca da una subshell, ripristina i segnali intrappolati (ma non ignorati) all'azione predefinita. Iltrappola il comando non ha alcun effetto sui segnali che sono stati ignorati all'ingresso della shell.

genere nome …

Interpreta ciascun nome come comando e stampa la risoluzione della ricerca del comando. Possibili risoluzioni sono: shell keyword, alias, shell builtin, comando, alias tracciato e non trovato. Per gli alias viene stampata l'espansione dell'alias; per i comandi e gli alias tracciati viene stampato il nome completo del comando.

ulimit-H -S -a -tfdscmlpn valore

Informarsi o impostare i limiti hard o soft sui processi o impostare nuovi limiti.La scelta tra il limite rigido (che nessun processo è autorizzato a violare e che non può essere sollevato una volta che è stato abbassato) e il limite morbido (che fa sì che i processi siano segnalati ma non necessariamente uccisi e che possono essere sollevati) è fatto con queste bandiere:

-H

impostare o informarsi sui limiti rigidi

-S

impostare o informarsi sui limiti soft. Se nessuno dei due -H né -S viene specificato, viene visualizzato il limite software o vengono impostati entrambi i limiti. Se vengono specificati entrambi, vince l'ultimo.

Il limite da interrogare o impostare, quindi, viene scelto specificando uno di questi flag:

-un

mostra tutti i limiti attuali

-t

mostra o imposta il limite sul tempo della CPU (in secondi)

-f

mostra o imposta il limite sul file più grande che può essere creato (in blocchi da 512 byte)

-d

mostra o imposta il limite sulla dimensione del segmento dati di un processo (in kilobyte)

-S

mostra o imposta il limite sulla dimensione dello stack di un processo (in kilobyte)

-c

mostra o imposta il limite sulla dimensione di dump di core più grande che può essere prodotta (in blocchi da 512 byte)

-m

mostra o imposta il limite sulla memoria fisica totale che può essere utilizzata da un processo (in kilobyte)

-l

mostra o imposta il limite sulla quantità di memoria che un processo può bloccare con mlock (2) (in kilobyte)

-p

mostra o imposta il limite al numero di processi che questo utente può avere contemporaneamente

-n

mostra o imposta il limite sui file numerici che un processo può aprire contemporaneamente

Se nessuno di questi è specificato, è il limite della dimensione del file che viene mostrato o impostato. Se viene specificato un valore, il limite è impostato su quel numero; altrimenti viene visualizzato il limite corrente.

I limiti di un processo arbitrario possono essere visualizzati o impostati utilizzando l'utilità sysctl (8).

umask maschera

Imposta il valore di umask (vedi umask (2)) sul valore ottale specificato. Se l'argomento è omesso, viene stampato il valore di umask.

unalias-un nome

Se nome è specificato, la shell rimuove quell'alias. Se -un è specificato, tutti gli alias vengono rimossi.

unset nome…

Le variabili e le funzioni specificate non sono impostate e non sono state esportate. Se un nome dato corrisponde sia a una variabile che a una funzione, sia la variabile che la funzione non sono impostate.

aspettare lavoro

Attendere il completamento del lavoro specificato e restituire lo stato di uscita dell'ultimo processo nel lavoro. Se l'argomento è omesso, attendere il completamento di tutti i lavori e restituire uno stato di uscita pari a zero.

Modifica della riga di comando

quandosh viene utilizzato in modo interattivo da un terminale, il comando corrente e la cronologia dei comandi (vedifc in Sx Builtins) può essere modificato utilizzando la modifica della riga di comando in modalità vi. Questa modalità utilizza i comandi, descritti di seguito, simili a un sottoinsieme di quelli descritti nella pagina man di vi. Il comando `set '-o vi abilita la modifica in modalità vi e inserisce sh in modalità di inserimento vi. Con la modalità vi abilitata, sh può essere commutato tra la modalità di inserimento e la modalità di comando. L'editor non è descritto per intero qui, ma sarà in un documento successivo. È simile a vi: digitando Aq ESC si passa alla modalità di comando comando VI. Premendo Aq ritorno mentre in modalità comando passerà la linea alla shell.

Utilizzare il uomo comando ( % uomo ) per vedere come viene utilizzato un comando sul tuo computer specifico.