So che gli script di shell eseguono semplicemente i comandi come se fossero eseguiti al prompt dei comandi. Mi piacerebbe essere in grado di eseguire script di shell come se fossero funzioni... Cioè, prendendo un valore di input o una stringa nello script. Come mi avvicino a farlo?
Risposta accettata:
Il comando shell e tutti gli argomenti di quel comando appaiono come numerati variabili della shell:$0
ha il valore stringa del comando stesso, qualcosa come script
, ./script
, /home/user/bin/script
o altro. Tutti gli argomenti vengono visualizzati come "$1"
, "$2"
, "$3"
e così via. Il conteggio degli argomenti è nella variabile della shell "$#"
.
I modi comuni per affrontare questo problema coinvolgono i comandi della shell getopts
e shift
. getopts
è molto simile al C getopt()
funzione di libreria. shift
sposta il valore di $2
a $1
, $3
a $2
, e così via; $#
viene decrementato. Il codice finisce per guardare il valore di "$1"
, facendo le cose usando un case
…esac
per decidere un'azione, quindi eseguire un shift
per spostare $1
al prossimo argomento. Deve solo esaminare $1
e forse $#
.