logo

Come passare e analizzare argomenti e parametri dello script Bash di Linux

L'analisi e il passaggio di argomenti negli script bash/script di shell è abbastanza simile al modo in cui passiamo gli argomenti alle funzioni all'interno degli script Bash. Vedremo il processo effettivo di passaggio degli argomenti a uno script e vedremo anche il modo per accedere a tali argomenti all'interno dello script.

Passaggio di argomenti prima dell'esecuzione

Possiamo passare i parametri subito dopo il nome dello script durante l'esecuzione del comando dell'interprete bash. È possibile passare parametri o argomenti al file. Solo il comando per eseguire normalmente lo script aggiungendo il valore dei parametri direttamente allo script. Ogni parametro è un valore separato da spazi da passare allo script di shell.

bash scriptname.sh>

Il comando precedente eseguirà semplicemente lo script senza passare i parametri.



Mentre il comando seguente passerà gli argomenti allo script.

bash scriptname.sh parameter1 parameter2 parameter3 nth-parameter>

Esecuzione dello script bash con passaggio di parametri

Lo screenshot sopra mostra i parametri passati allo script, come lo faremo, che spiegheremo nella sezione successiva. Ma in questo momento possiamo vedere che abbiamo passato i parametri dall'esterno dello script utilizzando le variabili di ambiente bash. Puoi anche utilizzare stringhe e altri tipi di dati, ma fai attenzione agli spazi bianchi. Lo spazio bianco renderà la variabile un parametro separato. Quindi, soprattutto per le stringhe, fai attenzione a racchiuderle rigorosamente tra virgolette.

Rilevamento degli argomenti della riga di comando

Ora vedremo come accedere a questi parametri all'interno dello script. Utilizzeremo il numero dei parametri passati nell'ordine, ovvero per i primi parametri passati, analizzeremo (accederemo) al parametro utilizzando $ 1 come variabile. Il primo parametro è memorizzato nella variabile . Inoltre, puoi assegnare questa variabile a qualsiasi altra variabile definita dall'utente che preferisci. Per l'ennesimo parametro passato, puoi utilizzare $n per accedere a quel particolare parametro. Qui, il nome della variabile inizia con 1 perché il nome del file/script è il parametro 0. Se hai più di 9 parametri, assicurati di utilizzare { } attorno al numero poiché senza parentesi, bash vedrà solo $ 10 come $ 1 ed escluderà lo 0, quindi usa $ {10} e così via invece di semplicemente $ 10.

#!/bin/bash echo '1st parameter =  ' echo '2nd Parameter =  '>

Lo script precedente può accedere ai parametri dalla riga di comando/shell utilizzando i parametri posizionali, che sono 1, 2, 3 e così via.

corso di matematica Java

Accesso agli argomenti dallo script.

Come puoi vedere, abbiamo utilizzato {} per accedere ai numeri delle variabili dei parametri da 10 in poi. Lo script può essere utilizzato per cicli for e while per scorrere i parametri, ma ne parleremo nelle sezioni successive.

oggetto Java

Assegna gli argomenti forniti alla variabile Bash

Possiamo anche assegnarlo ad altre variabili personalizzate per rendere lo script più dinamico e modellarlo a seconda delle esigenze. Sebbene lo script precedente quando eseguito stamperà solo due parametri, sicuramente puoi accedere a più parametri utilizzando la variabile come ordine dei parametri in numeri. Lo script può accedere alle variabili posizionali dalla riga di comando e utilizzarle nei punti richiesti, ovunque sia necessario, all'interno dello script.

#!/bin/bash a= b= p=$(($a*$b)) echo 'The product of $a and $b = $p'>

Assegna gli argomenti forniti alla variabile Bash

Lo script precedente accede ai parametri posizionali, ovvero e passati allo script e memorizza le variabili definite dall'utente per accedervi in ​​seguito e modificarle di conseguenza. Possiamo anche accedere a più parametri utilizzando metodi iterativi, come vedremo nelle prossime sezioni.

Abbiamo anche la possibilità di verificare la presenza di eventuali parametri NULL o vuoti passati utilizzando i flag -z o -n. Da questo possiamo verificare se i parametri sono stati passati o meno.

#!/bin/bash if [[ -z  ]]; then echo 'No parameter passed.' else echo 'Parameter passed = ' fi>

Verifica dei parametri posizionali passati o meno.

Con questo script possiamo rilevare se sono stati passati parametri posizionali o se non è stato passato nulla. Il flag -z controlla eventuali variabili NULL o non inizializzate in BASH. Il flag -z restituisce true se la variabile passata è NULL o non inizializzata. Pertanto, possiamo utilizzare le istruzioni If-else di base per rilevare i parametri passati.

Possiamo anche usare -n flag che restituisce true se non vengono passati parametri, quindi dobbiamo usare ! per invertire la condizione.

Come segue:

#!/bin/bash if [[ ! -n  ]]; then echo 'No parameter passed.' else echo 'Parameter passed = ' fi>

Anche questo script fornirà lo stesso output, ma stiamo utilizzando il flag -n invece di -z.

Lettura di più argomenti con il ciclo For o While

Possiamo usare la variabile @ per accedere a tutti i parametri passati allo script tramite la riga di comando. È una variabile speciale che contiene l'array di variabili in BASH. In questo caso, lo stiamo usando da solo, quindi contiene l'array di parametri posizionali passati. Possiamo usarlo per scorrere i parametri passati usando i loop o anche il ciclo while.

modelli di programmazione java
#!/bin/bash for i in $@ do echo -e '$i
' done>

Utilizzo dei loop e della variabile @ per accedere ai parametri come elementi dell'array.

Abbiamo utilizzato un ciclo for basato su intervallo per eseguire l'iterazione finché non ci sono elementi nell'array @. Semplicemente iteriamo sull'array e stampiamo l'elemento. Possiamo semplicemente assegnarlo, modificare i valori e apportare le modifiche richieste ai parametri e agli argomenti per ottenere il risultato desiderato dallo script.

O

Possiamo anche stampare gli argomenti utilizzando il ciclo while e le variabili ambientali di BASH.

#!/bin/bash i=$(($#-1)) while [ $i -ge 0 ]; do echo ${BASH_ARGV[$i]} i=$((i-1)) done>

Utilizzo del ciclo while per scorrere i parametri passati.

differenza tra array e arraylist

Stiamo usando la variabile ' # ‘ poiché contiene il numero di parametri passati. Inizializziamo il numero di parametri e ne togliamo uno poiché utilizzeremo un array per scorrere su di esso. Quindi, come al solito, l'indice dell'array inizia da 0. Poiché questo array viene inizializzato dall'ultimo elemento o parametro passato, dobbiamo decrementare il contatore fino a 0 per stampare ogni parametro nell'ordine in cui viene passato. Utilizziamo semplicemente l'array BASH_ARGV per accedere ai parametri e stamparne il valore. Inoltre, ad ogni iterazione, diminuiamo il valore di i- l'iteratore o il contatore di uno utilizzando le doppie parentesi aritmetiche. Da questo, stampiamo semplicemente ogni parametro passato allo script utilizzando un ciclo while come mostrato nello screenshot di output.

Lettura con nomi di parametri

Utilizzo di getopts per analizzare argomenti e parametri

Possiamo usare il programma/comando getopts per analizzare gli argomenti passati allo script nella riga di comando/terminale utilizzando loop e istruzioni switch-case.

#!/bin/bash while getopts n:c: option do case '${option}' in n)nation=${OPTARG};; c)code=${OPTARG};; esac done echo 'Nation : $nation' echo 'code : $code'>

Utilizzo di getopts per analizzare argomenti e parametri

Usando getopts, possiamo assegnare gli argomenti/parametri posizionali dalla riga di comando direttamente alle variabili bash. Questo ci permette di gestire i parametri in modo gradevole e sistematico. Nello script precedente, abbiamo utilizzato due argomenti per memorizzare le variabili bash utilizzando la sintassi getopts, i cicli while e le istruzioni switch-case.

Stampa dei valori di tutti gli argomenti

Possiamo stampare gli argomenti passati allo script tramite una semplice e potente variabile '@' che memorizza tutti i parametri passati.

#!/bin/bash echo 'The arguments passed in are : $@'>

Stampa dei valori di tutti gli argomenti

Accesso al numero di parametri passati

Possiamo anche usare la variabile '#' per accedere al numero di parametri passati dalla riga di comando. La variabile # contiene fondamentalmente il numero di parametri/argomenti che vengono passati nello script.

#!/bin/bash echo 'The number of arguments passed in are : $#'>

Accesso al numero di parametri passati

Di seguito sono riportati il ​​processo e le specifiche per il passaggio e l'analisi delle variabili nello script bash. La logica di spostamento e modifica delle variabili è nelle mani dell'utente. Questa era solo una dimostrazione del passaggio e dell'analisi degli argomenti dalla riga di comando allo script per renderli più dinamici.