Introduzione
Abbiamo precedentemente esaminato come passare gli argomenti della riga di comando a uno script bash. In questo tutorial, daremo un’occhiata a come possiamo usare questi argomenti all’interno dello script bash.,
Ulteriori letture:
Come Passare Argomenti della Riga di Comando di Script Bash
Come Utilizzare il cd di Comando in uno Script Bash
la Lettura di Output di un Comando In un Array in Bash
l’Elaborazione dell’Input
Diamo un’occhiata a modi diversi di elaborare gli argomenti passati ad uno script bash all’interno dello script.
2.1. I parametri posizionali
Gli argomenti passati a uno script vengono elaborati nello stesso ordine in cui vengono inviati., L’indicizzazione degli argomenti inizia da uno e il primo argomento è accessibile all’interno dello script usando $1. Allo stesso modo, è possibile accedere al secondo argomento usando $2 e così via. Il parametro posizionale si riferisce a questa rappresentazione degli argomenti che utilizzano la loro posizione.
Prendiamo un esempio del seguente script, userReg-positional-parameter.,sh, che stampa nome utente, età e nome completo in questo ordine:
echo "Username: $1";echo "Age: $2";echo "Full Name: $3";
Ora eseguiamo questo script con i tre parametri di input:
sh userReg-positional-parameter.sh john 25 'John Smith'
L’output sarà:
Username : johnAge: 25Full Name: John Smith
2.2. Flags
Usare flags è un modo comune per passare input a uno script. Quando si passa l’input allo script, c’è un flag (di solito una singola lettera) che inizia con un trattino (-) prima di ogni argomento.
Diamo un’occhiata al userReg-flags.sh script, che accetta tre argomenti: nome utente (-u), età (-a) e nome completo (- f).,
Modificheremo lo script precedente per utilizzare i flag invece di basarci su parametri posizionali., Il getopts funzione legge il flag di input, e l’OPZIONE si riferisce ai corrispondenti valori:
eseguire questo script con lo stesso input come prima, solo che questa volta, vogliamo aggiungere un flag di input:
sh userReg-flags.sh -f 'John Smith' -a 25 -u john
L’output è lo stesso di prima, anche se abbiamo spostato le posizioni di nome utente, nome e cognome argomenti:
Username : johnAge: 25Full Name: John Smith
Qui stiamo usando il getopts funzione per analizzare le bandiere forniti come input, e in caso di blocco per assegnare il valore alla variabile corrispondente.
2.3., Loop Construct
I parametri posizionali, sebbene convenienti in molti casi, non possono essere utilizzati quando la dimensione dell’input è sconosciuta. L’uso di un costrutto loop è utile in queste situazioni.
La variabile è la matrice di tutti i parametri di input. Usando questa variabile all’interno di un ciclo for, possiamo iterare sull’input ed elaborare tutti gli argomenti passati.
Prendiamo un esempio degli utenti di script-loop.,sh, che scrive tutti i nomi che sono stati passati come input:
i=1;for user in "" do echo "Username - $i: $user"; i=$((i + 1));done
Ora si eseguire lo script:
sh users-loop.sh john matt bill 'joe wicks' carol
E vedremo il nostro output:
Username - 1: johnUsername - 2: mattUsername - 3: billUsername - 4: joe wicksUsername - 5: carol
Nell’esempio di cui sopra, siamo iterazione la variabile utente su tutta la gamma di parametri di input. Questa iterazione inizia dal primo argomento di input, john, e viene eseguita fino all’ultimo argomento, carol, anche se la dimensione dell’input è sconosciuta.
2.4., Shift Operator
Shift operator in bash (sintatticamente shift n, dove n è il numero di posizioni da spostare) sposta la posizione degli argomenti della riga di comando. Il valore predefinito per n è uno se non specificato.
L’operatore shift fa sì che l’indicizzazione dell’input inizi dalla posizione spostata. In altre parole, quando questo operatore viene utilizzato su un input di array, il parametro posizionale $1 cambia l’argomento raggiunto spostando n posizioni a destra dall’argomento corrente associato al parametro posizionale $1.,
Considera uno script di esempio che determina se l’input è pari o dispari:
sh parityCheck.sh 13 18 27 35 44 52 61 79 93
Dalla discussione precedente sul parametro posizionale, ora sappiamo che $1 si riferisce al primo argomento, che è 13. L’utilizzo dell’operatore shift con input 1 (shift 1) fa sì che l’indicizzazione inizi dal secondo argomento. Cioè, $1 ora si riferisce al secondo argomento (18). Allo stesso modo, chiamare shift 2 farà sì che l’indicizzazione inizi dal quarto argomento (35).
Diamo ancora un’occhiata all’esempio dello script degli utenti discusso sopra., Invece di usare la variabile e iterare su di essa, ora useremo l’operatore shift. Il $# variabile restituisce la dimensione di input:
i=1;j=$#;while do echo "Username - $i: $1"; i=$((i + 1)); shift 1;done
eseguire lo script con l’ingresso sopra:
sh users-shift-operator.sh john matt bill 'joe wicks' carol
L’output sarà la stessa di prima:
Username - 1: johnUsername - 2: mattUsername - 3: billUsername - 4: joe wicksUsername - 5: carol
In questo esempio, stiamo spostando il parametro posizionale in ogni iterazione per uno fino a quando si raggiunge la fine dell’input. Pertanto, $1 si riferisce all’elemento successivo nell’input ogni volta.,
Conclusione
In questo articolo, abbiamo esaminato come gli argomenti passati a uno script bash durante il runtime possono essere elaborati all’interno dello script in diversi modi:
- I parametri posizionali possono essere utilizzati quando la dimensione dell’input è fissa e l’ordine degli argomenti nell’input è noto.
- Con i flag, l’ordine degli argomenti nell’input non ha importanza.
- Il costrutto del ciclo è utile quando la dimensione dell’input è sconosciuta.
- L’operatore Shift fa sì che l’indicizzazione inizi dall’argomento nella posizione spostata.,
- La variabile restituisce l’array di parametri di input e $# restituisce la dimensione dell’array di input.
Come sempre, gli esempi utilizzati in questo articolo sono disponibili su GitHub.