Scrivere uno script Bash in modo che riceva gli argomenti specificati quando lo script viene chiamato dalla riga di comando. Utilizzare questo metodo quando uno script deve eseguire una funzione leggermente diversa a seconda dei valori dei parametri di input, chiamata anche argomenti.

Lifewire / Ran Zheng

Esempio di passaggio di argomenti in uno script Bash

Se hai sviluppato uno script chiamato stats.sh che conta le parole in un file, è meglio passare il nome del file come argomento in modo che lo stesso script possa essere utilizzato per tutti i file che verranno elaborati. Ad esempio, se il nome del file da elaborare è lista delle canzoni, inserisci quanto segue nella riga di comando:

sh stats.sh songlist

Si accede agli argomenti all’interno di uno script usando le variabili $1,$2,$3,e così via. La variabile $1 si riferisce al primo argomento,$2 al secondo argomento, e $3 al terzo argomento. Ad esempio, nello script:

FILE1=$1
wc $FILE1

Assegna una variabile con un nome descrittivo al valore del primo argomento ($1), quindi chiama l’utilità di conteggio delle parole (WC) sulla variabile $FILE1 o qualsiasi altra cosa tu voglia fare.

Se hai bisogno di un numero variabile di argomenti, usa il [email protected] variabile, che è un array di tutti i parametri di input. Questa procedura utilizza un ciclo for per elaborarli in modo iterativo, come illustrato nell’esempio seguente:

for FILE1 in "[email protected]"
do
wc $FILE1
done

Ecco un esempio di come chiamare questo script con argomenti dalla riga di comando:

sh stats.sh songlist1 songlist2 songlist3

Se un argomento include spazi, racchiuderlo tra virgolette singole. Per esempio:

sh stats.sh 'songlist 1' 'songlist 2' 'songlist 3'

Metodo delle bandiere

Spesso viene scritto uno script in modo che gli argomenti possano essere passati in qualsiasi ordine utilizzando i flag. Con il metodo flags, alcuni degli argomenti possono essere resi facoltativi.

Ad esempio, scrivi uno script che recuperi le informazioni da un database in base a parametri specificati, come nome utente,Data,e Prodottoe genera un report in un formato specificato. Lo script deve essere scritto in modo tale che questi parametri vengano passati quando viene chiamato lo script. Potrebbe assomigliare a questo:

makereport -u jsmith -p notebooks -d 10-20-2011 -f pdf

class=”ql-syntax”>

Bash abilita questa funzionalità con il getopts funzione. Per l’esempio precedente, utilizzare getopts come segue:

while getopts u:d:p:f: option
do
case "${option}"
in
u) USER=${OPTARG};;
d) DATE=${OPTARG};;
p) PRODUCT=${OPTARG};;
f) FORMAT=${OPTARG};;
esac
done

class=”ql-syntax”>

Questo è un ciclo while che usa il getopts funzione e un cosiddetto optstring-in questo caso u:d:p:f:– per scorrere gli argomenti. Il mentre loop attraversa la stringa opt, che contiene i flag utilizzati per passare gli argomenti e assegna il valore dell’argomento fornito per quel flag alla variabile opzione. Il Astuccio l’istruzione assegna quindi il valore della variabile opzione a una variabile globale che viene utilizzata dopo che tutti gli argomenti sono stati letti.

Significati per i due punti

I due punti nella stringa opt indicano che i valori sono richiesti per i flag corrispondenti. Nell’esempio sopra di u:d:p:f:,tutti i flag sono seguiti da due punti. Ciò significa che tutti i flag necessitano di un valore. Se, ad esempio, il D e F non ci si aspettava che i flag avessero un valore,u:dp:f sarebbe il optstring.

I due punti iniziali mettono getopts in ‘modalità di segnalazione silenziosa’. Invece di sbagliare completamente lo script, qualsiasi argomento imprevisto riempie il ? opzione e puoi cercarla o gestirla secondo necessità. Senza i due punti iniziali nella stringa opt, il terminale visualizza un errore. Ad esempio, ho lo script dall’alto che conta le parole. Si aspetta una sintassi come “stats.sh -f nomefile”. Senza i due punti, se provo “stats.sh -h”, ottengo:

stats.sh -h
stats.sh: illegal option -- h

Considerando che, con i due punti, posso quindi inserire una riga nel mio script aspettandomi qualcosa del genere, ad esempio – ?) echo “Nessun argomento -${OPTARG} trovato.”;; . Questo mi consente quindi di acquisire e gestire la voce imprevista (in questo caso emettendo il mio messaggio di errore).

stats.sh -h
No -h argument found.

Gli argomenti che non sono preceduti da un flag vengono ignorati da getopts. Se i flag specificati nella stringa opt non vengono forniti quando viene chiamato lo script, non accade nulla, a meno che non si gestisca in modo speciale questo caso nel codice. Qualsiasi argomento non gestito da getops può ancora essere catturato con il normale $1,$2,e $3 variabili.

Leave a Reply

Your email address will not be published. Required fields are marked *