Introduzione
Il set
command è un comando shell Linux integrato che visualizza e imposta i nomi e i valori delle variabili di ambiente shell e Linux. Su sistemi operativi simili a Unix, il set
funzioni di comando all'interno della shell Bourne (sh
), shell C (csh
) e Korn shell (ksh
).
In questo tutorial imparerai cosa il set
comando è e come usarlo.
Prerequisiti
- Un sistema che esegue Linux.
- Accesso a un terminale/riga di comando.
Linux imposta la sintassi dei comandi
La sintassi generale per il set
il comando è:
set [options] [arguments]
Opzioni
Nel contesto del set
comando, [options]
sono impostazioni o flag impostati o non impostati nell'ambiente della shell Bash. Usalo per influenzare il comportamento di script di shell definiti e aiutare a eseguire le attività desiderate.
- Imposta un'opzione utilizzando un segno meno (
-
) seguito dall'opzione appropriata. - Disattiva un'opzione utilizzando un segno più (
+
) seguito dall'opzione appropriata.
Argomenti
[arguments]
sono parametri posizionali e sono assegnati in ordine con i seguenti parametri:
$1
$2
- ...
$n
Non specificando alcuna opzione o argomento, il comando stampa tutte le variabili della shell.
Valori di uscita
Il set
comando ha tre valori di uscita:
0
. Segna un completamento riuscito.1
. Errore causato da un argomento non valido.2
. Errore risultante in un messaggio di utilizzo, di solito perché manca un argomento.
Linux imposta le opzioni dei comandi
Il set
comando fornisce un ampio elenco di opzioni che possono essere combinate.
La maggior parte delle opzioni ha un corrispondente -o flag
che può essere utilizzato per invocare l'opzione. La tabella seguente elenca tutte le opzioni e la rispettiva forma alternativa utilizzando il -o flag
sintassi.
Opzioni | -o flag | Descrizione |
---|---|---|
-a | -o allexport | Segna tutte le variabili o le funzioni create o modificate per l'esportazione. |
-b | -o notify | Avvisa l'utente al termine del lavoro in background. |
-e | -o errexit | Comanda a una shell di uscire se un comando fallisce, cioè se restituisce uno stato di uscita diverso da zero. |
-f | -o noglob | Disabilita la generazione del nome file (globbing). |
-h | -o hashall | Individua e salva i comandi di funzione quando viene definita una funzione. Il -h l'opzione è abilitata per impostazione predefinita. |
-k | -o keyword | Posiziona tutti gli argomenti di assegnazione nell'ambiente per un comando, non solo quelli che precedono il nome del comando. |
-n | -o noexec | Legge i comandi ma non li esegue. |
-m | -o monitor | Visualizza un messaggio al termine di un'attività. |
-p | -o privileged | Disabilita il $ENV elaborazione di file e importazione di funzioni di shell. Il -p l'opzione è abilitata per impostazione predefinita quando gli ID utente reali ed effettivi non corrispondono. Disattivandolo si imposta uid e gid effettivi su uid e gid reali. |
-t | -o onecmd | Legge un comando e poi esce. |
-u | -o nounset | Tratta le variabili non impostate o non definite come un errore durante la sostituzione (durante l'espansione dei parametri). Non si applica a parametri speciali come il carattere jolly * o @ . |
-v | -o verbose | Stampa le righe di input della shell durante la lettura. |
-x | -o xtrace | Stampa gli argomenti dei comandi durante l'esecuzione. |
-B | -o braceexpand | Esegue l'espansione della parentesi della shell. |
-C | -o noclobber | Previene la sovrascrittura di file regolari esistenti mediante il reindirizzamento dell'output. Per impostazione predefinita, Bash consente all'output reindirizzato di sovrascrivere i file esistenti. |
-E | -o errtrace | Fa in modo che le funzioni della shell ereditino il trap ERR. |
-H | -o histexpand | Abilita la sostituzione della cronologia degli stili. L'opzione è attiva per impostazione predefinita quando la shell è interattiva. |
-P | -o physical | Previene il collegamento simbolico durante l'esecuzione dei comandi. |
-T | -o functrace | Fa in modo che le funzioni della shell ereditino il trap DEBUG. |
-- | n/d | Assegna gli argomenti rimanenti ai parametri posizionali. Se non ci sono argomenti rimanenti, annulla l'impostazione dei parametri posizionali. |
- | n/d | Assegna eventuali argomenti rimanenti ai parametri posizionali. Disattiva il -x e -v opzioni. |
n/a | -o emacs | Utilizza un'interfaccia di modifica delle linee in stile emacs. |
n/a | -o history | Abilita la cronologia dei comandi. |
n/a | -o ignoreeof | La shell non si chiude dopo aver letto la fine del file. |
n/a | -o interactive-comments | Consente commenti nei comandi interattivi. |
n/a | -o nolog | Non registra le definizioni delle funzioni nel file della cronologia. |
n/a | -o pipefail | Il valore restituito di una pipeline è lo stato dell'ultimo comando che aveva uno stato diverso da zero all'uscita. Se nessun comando aveva uno stato diverso da zero all'uscita, il valore è zero. |
n/a | -o posix | Fa in modo che Bash corrisponda allo standard quando l'operazione predefinita è diversa dallo standard Posix. |
n/a | -o vi | Utilizza un'interfaccia di modifica della riga simile a vi . |
Esempi di comandi per impostare Linux
Questa sezione elenca esempi degli usi più comuni del set
comando.
Utilizzo del comando impostato senza opzioni
L'esecuzione del comando senza opzioni o argomenti genera un elenco di tutte le impostazioni:i nomi e i valori di tutte le variabili e le funzioni della shell. Poiché l'elenco è molto lungo, puoi scorrerlo utilizzando la Pagina su e Pagina giù chiavi.
Di seguito è riportato un esempio di un set
parziale output del comando:
Debug degli script
Il set
comando è particolarmente utile quando si tenta di eseguire il debug degli script. Usa il -x
opzione con il set
comando per vedere quale comando nel tuo script viene eseguito dopo il risultato, permettendoti di determinare il risultato di ogni comando.
L'esempio seguente mostra come eseguire il debug degli script con set -x
. Segui i passaggi seguenti:
1. Esegui set -x
:
set -x
2. Usa il tuo editor di testo preferito (noi usiamo l'editor vi) per creare uno script. Abbiamo creato un semplice loop che ci permette di vedere il -x
effetti delle opzioni:
x=10
while [ $x -gt 0 ]; do
x=$[ $x-1 ]
echo $x
sleep 2
done
3. Assicurati di chmod lo script per renderlo eseguibile. Questo passaggio è sempre obbligatorio prima di eseguire uno script . La sintassi è:
chmod +x [script-name.sh]
4. Eseguire lo script. La sintassi è:
./[script-name.sh]
L'output stampa una riga alla volta, la esegue, mostra il risultato se ce n'è uno e passa alla riga successiva.
Un altro modo per abilitare il debug è posizionare il -x
flag sulla riga shebang dello script:
#!/bin/bash -x
Esportazione script
Esporta automaticamente qualsiasi variabile o funzione creata utilizzando il -a
opzione. L'esportazione di variabili o funzioni consente ad altri subshell e script di utilizzarle.
Abilita l'esportazione degli script eseguendo il comando seguente:
set -a
L'esempio seguente mostra come funziona l'esportazione degli script. Segui i passaggi seguenti:
1. Crea un nuovo script usando il tuo editor preferito. Ad esempio:
one=1
two=2
three=3
four=4
/bin/bash
Il /bin/bash
argomento segna l'inizio di una nuova shell.
2. Verifica se lo script funziona in una nuova shell:
echo $one $two $three $four
L'output dimostra che la funzione che abbiamo creato è stata esportata e funziona anche all'avvio di una nuova shell.
Esci quando un comando fallisce
Usa il -e
opzione per indicare a uno script di uscire se incontra un errore durante l'esecuzione. L'arresto di uno script parzialmente funzionante aiuta a prevenire problemi o risultati errati.
Crea uno script con i seguenti contenuti per testare questa opzione:
#!/bin/bash
set -e
cat nonexistingfile
echo "The end"
Nell'esempio precedente, lo script rileva un errore durante il tentativo di mostrare il contenuto di nonexistingfile
perché quel file non esiste, causandone l'uscita a quel punto. Quindi, l' echo
finale il comando non viene eseguito.
Prevenire la perdita di dati
L'impostazione predefinita di Bash consiste nel sovrascrivere i file esistenti. Tuttavia, utilizzando il -C
l'opzione configura Bash per non sovrascrivere un file esistente durante il reindirizzamento dell'output utilizzando >
, >&
o <>
viene reindirizzato a quel file.
Ad esempio:
Bash prima ci consente di sovrascrivere il listing.txt
file. Tuttavia, dopo aver eseguito il set -C
comando, Bash emette un messaggio in cui si afferma che non può sovrascrivere un file esistente.
Segnala variabili inesistenti
L'impostazione predefinita in Bash è ignorare le variabili inesistenti e lavorare con quelle esistenti. Utilizzando il -u
l'opzione impedisce a Bash di ignorare le variabili che non esistono e segnala il problema.
Ad esempio, il seguente script non contiene il set -u
command e Bash lo ignora $var2
non è definito.
#!/bin/bash
var1="123"
echo $var1 $var2
L'output contiene solo $var1
.
Tuttavia, modificando lo script e aggiungendo il set -u
comando impedisce a Bash di ignorare il problema e lo segnala:
#!/bin/bash
set -u
var1="123"
echo $var1 $var2
Imposta parametri posizionali
Il set
comando può anche assegnare valori ai parametri posizionali. Un parametro posizionale è una variabile di shell il cui valore è referenziato usando la seguente sintassi:
$[N]
Il [N]
value è una cifra che denota la posizione del parametro. Ad esempio, $1
è il primo parametro posizionale, $2
è il secondo parametro, ecc.
Ad esempio:
set first second third
L'esecuzione del comando sopra imposta first
per corrispondere al $1
parametro posizionale, second
a $2
e third
a $3
. Verificalo con il comando echo:
echo $2
Annulla l'impostazione dei parametri posizionali eseguendo:
set --
Dividi le corde
Usa il set
comando per dividere le stringhe in base agli spazi in variabili separate. Ad esempio, suddividi le stringhe in una variabile chiamata myvar
, che dice "Questo è un test" .
myvar="This is a test"
set -- $myvar
echo $1
echo $2
echo $3
echo $4
Usa questa opzione per estrarre e filtrare le informazioni dall'output di un comando, in modo simile a quello che fa il comando awk.
Imposta allexport e notifica i flag
Il -o allexport
flag consente di esportare automaticamente tutte le variabili definite successivamente, mentre il -o notify
flag indica alla shell di stampare immediatamente i messaggi di completamento del lavoro.
Per impostare i flag, esegui:
set -o allexport -o notify
Nell'esempio seguente, vediamo che la shell ti avvisa al completamento del lavoro in background da quando lo script è stato esportato: