[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.
Avatar utente
danix
Staff
Staff
Messaggi: 3287
Iscritto il: ven ott 27, 2006 19:32
Nome Cognome: Danilo M.
Slackware: 64 14.1
Kernel: 4.4.0
Desktop: kde4
Località: Siderno (RC)
Contatta:

[bash] getopts e argomenti multipli

Messaggioda danix » dom mag 25, 2008 13:05

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

myself 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 set 03, 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

Messaggioda Mario Vanoni » sab mag 31, 2008 10:35

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}'`


Torna a “Programmazione”

Chi c’è in linea

Visitano il forum: Nessuno e 3 ospiti