[bash] getopts e argomenti multipli

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
Rispondi
Avatar utente
danix
Staff
Staff
Messaggi: 3289
Iscritto il: ven 27 ott 2006, 19:32
Nome Cognome: Danilo M.
Slackware: 64 current
Kernel: 6.12.13 x86_64
Desktop: i3
Località: Verona (VR)
Contatta:

[bash] getopts e argomenti multipli

Messaggio da danix »

Ciao a tutti,
oggi mi è venuto un dubbio riguardo a getopts...
mettiamo caso che io abbia uno script che richiede le opzioni -a -b -c... all'opzione -a voglio passare un parametro, quindi faccio così:

Codice: Seleziona tutto

while getopts ":a:bc" OPTION;do
    case $OPTION in
        a) echo "hai selezionato -a con '$OPTARG' come argomento" ;;
        b) echo "hai selezionato -b";;
        c) echo "hai selezionato -c";;
        *) echo "hai sbagliato";;
    esac
done
shift $(($OPTIND - 1))
exit
In questo modo se io chiamo lo script in questo modo:

Codice: Seleziona tutto

$ script -a argomento
hai selezionato -a con 'argomento' come argomento
avrò questo risultato, ma se io volessi passare più di un argomento all'opzione -a?? Ad esempio se volessi ottenere questo risultato??

Codice: Seleziona tutto

hai selezionato -a con 'argomento1' 'argomento2' 'argomentoN' come argomenti
come dovrei fare??

Grazie mille per l'aiuto...


Ciau
danix
danix ha scritto:non sono molto presente sul forum, e di ciò mi scuso con tutti

Mario Vanoni
Iper Master
Iper Master
Messaggi: 3174
Iscritto il: lun 3 set 2007, 21:20
Nome Cognome: Mario Vanoni
Slackware: 12.2
Kernel: 3.0.4 statico
Desktop: fluxbox/seamonkey
Località: Cuasso al Monte (VA)

Re: [bash] getopts e argomenti multipli

Messaggio da Mario Vanoni »

danix85 ha scritto:Ciao a tutti,
oggi mi è venuto un dubbio riguardo a getopts...
mettiamo caso che io abbia uno script che richiede le opzioni -a -b -c... all'opzione -a voglio passare un parametro, quindi faccio così:

Codice: Seleziona tutto

while getopts ":a:bc" OPTION;do
    case $OPTION in
        a) echo "hai selezionato -a con '$OPTARG' come argomento" ;;
        b) echo "hai selezionato -b";;
        c) echo "hai selezionato -c";;
        *) echo "hai sbagliato";;
    esac
done
shift $(($OPTIND - 1))
exit
In questo modo se io chiamo lo script in questo modo:

Codice: Seleziona tutto

$ script -a argomento
hai selezionato -a con 'argomento' come argomento
avrò questo risultato, ma se io volessi passare più di un argomento all'opzione -a?? Ad esempio se volessi ottenere questo risultato??

Codice: Seleziona tutto

hai selezionato -a con 'argomento1' 'argomento2' 'argomentoN' come argomenti
come dovrei fare??

Grazie mille per l'aiuto...


Ciau
Metti gli argomenti in apici,
-a 'a b c d e f'
separarli poi in $OPTARG e` facile:
awk '{print NF}' == numero di argomenti in $OPTARG
awk '{print $2}' == il secondo argomento ecc.
nella shell e.g.:
VARIABILE1=`echo $OPTARG | awk '{print $1}'`

Rispondi