scrivere un comando con le sue opzioni con sh

Se avete problemi con l'installazione e la configurazione di Slackware postate qui. Non usate questo forum per argomenti generali... per quelli usate Gnu/Linux in genere.

Moderatore: Staff

Regole del forum
1) Citare sempre la versione di Slackware usata, la versione del Kernel e magari anche la versione della libreria coinvolta. Questi dati aiutano le persone che possono rispondere.
2) Per evitare confusione prego inserire in questo forum solo topic che riguardano appunto Slackware, se l'argomento è generale usate il forum Gnu/Linux in genere.
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.
dark0s
Linux 3.x
Linux 3.x
Messaggi: 556
Iscritto il: lun 10 gen 2005, 0:00

scrivere un comando con le sue opzioni con sh

Messaggio da dark0s »

Ciao, vorrei scrivere uno script che funda da vero e proprio comando di shell, cioè un comando con le sue opzioni:

script -a ..... -b .......

Come faccio a mettere le opzioni con i relativi argomenti nel programma-script

Avatar utente
gallows
Staff
Staff
Messaggi: 3471
Iscritto il: lun 20 set 2004, 0:00
Desktop: cwm
Distribuzione: OpenBSD
Località: ~/
Contatta:

Messaggio da gallows »


Avatar utente
aelsantex
Linux 0.x
Linux 0.x
Messaggi: 67
Iscritto il: sab 28 ago 2004, 0:00

Messaggio da aelsantex »

Piccolo esempio:

while getopts a:t:v: OptStr ; do
case $OptStr in
a) AZIONE=$OPTARG ;;
t) TIPO_ESECUZIONE=$OPTARG ;;
v) LIVELLO_VERBOSE=$OPTARG ;;
*)
print_usage
exit 1
;;
esac
done

E poi anche il sito:
http://www.tldp.org/LDP/abs/html/

dark0s
Linux 3.x
Linux 3.x
Messaggi: 556
Iscritto il: lun 10 gen 2005, 0:00

Messaggio da dark0s »

Il costrutto case prevede qualcosa per selezionare un insieme di opzioni e poi una alternativa a tutte, del tipo:

case $1 in
a) Configura...
b) Configura...
c) ...
else
d) Rimuovi tutte le configurazioni precedenti

Avatar utente
gallows
Staff
Staff
Messaggi: 3471
Iscritto il: lun 20 set 2004, 0:00
Desktop: cwm
Distribuzione: OpenBSD
Località: ~/
Contatta:

Messaggio da gallows »

Forse ti riferisci a questo:

Codice: Seleziona tutto

case "$1" in

'-a')
echo "aaaaa"
;;

'-b')
echo "bbbbbb"
;;

'-c')
echo "ccccc"
;;

*)
echo "?????"

esac
Se non passi né a né b e né c, stampa "????"

dark0s
Linux 3.x
Linux 3.x
Messaggi: 556
Iscritto il: lun 10 gen 2005, 0:00

Messaggio da dark0s »

No, io dico qualcosa del genere:
"Esegue l'argomento della opzione a, esegue l'argomento b, ...
script -a -b ...

oppure

"Esegue l'argomento di una opzione che non può essere utilizzata con le altre". Cioè

script -r

e che rimuove tutte le configurazioni delle opzioni precedenti.

Avatar utente
gallows
Staff
Staff
Messaggi: 3471
Iscritto il: lun 20 set 2004, 0:00
Desktop: cwm
Distribuzione: OpenBSD
Località: ~/
Contatta:

Messaggio da gallows »

Forse se posti l'abbozzo dello script (commentato) è meglio.

dark0s
Linux 3.x
Linux 3.x
Messaggi: 556
Iscritto il: lun 10 gen 2005, 0:00

Messaggio da dark0s »

...nà parola..., sto utilizzando Windows, Linux è installato su un altro pc. L'intenzione dello script è di essere un vero e proprio "comando di shell". Comunque, più o meno, lo script è:

vi script
...
...
while getopts :m:s:a:n: OPZIONE; do
case $OPZIONE in
m) ETHM=$OPTARG;;
s) ETHS=$OPTARG;;
a) IPHOST=$OPTARG;;
n) NETMASK=$OPTARG;;
esac
Fai tutte le configurazioni necessarie con le variabili settate.
done

Vorrei sapere se è possibile inserire una opzione, che viene eseguita in alternativa a tutte quelle precedenti, per rimuovere tutte le configurazioni eseguite precedentemente.

:?

Avatar utente
gallows
Staff
Staff
Messaggi: 3471
Iscritto il: lun 20 set 2004, 0:00
Desktop: cwm
Distribuzione: OpenBSD
Località: ~/
Contatta:

Messaggio da gallows »

Forse questo:

Codice: Seleziona tutto

case "$1" in

'-a')
ETHM=$OPTARG
;;

'-b')
ETHS=$OPTARG
;;

'-c')
IPHOST=$OPTARG
;;

'-d')
NETMASK=$OPTARG
;;

*)
ETHM=
ETHS=
IPHOST=
NETMASK=
?

dark0s
Linux 3.x
Linux 3.x
Messaggi: 556
Iscritto il: lun 10 gen 2005, 0:00

Messaggio da dark0s »

No perchè non c'è solo da rimuovere dei settaggi. Stog ad assì matt...

PS scusatemi l'espressione pugliese

Avatar utente
gallows
Staff
Staff
Messaggi: 3471
Iscritto il: lun 20 set 2004, 0:00
Desktop: cwm
Distribuzione: OpenBSD
Località: ~/
Contatta:

Messaggio da gallows »

Se devi fare tante cose ti consiglio di usare le funzioni.

Codice: Seleziona tutto

function reset_variables()
{
  ETHM=
  ETHS=
  IPHOST=
  NETMASK=

  exit 0
}

function print_status()
{
   for i in ETHM ETHS IPHOST NETMASK; do
   echo $i

  exit 0
}

function foo_bar() 
{
    #qualcosa ...
}

<-- snip -->
*)
reset_variables
print_status
foo_bar

esac


dark0s
Linux 3.x
Linux 3.x
Messaggi: 556
Iscritto il: lun 10 gen 2005, 0:00

Messaggio da dark0s »

E' possibile utilizzare opzioni con più di un di una lettera, del tipo s1 o s2 al posto della sola s.
Ho provato con:

while getopts :s1:s2:... OPZIONE; do
s1....
.....
.....
done

Insome s1 non si può utilizzare

Avatar utente
Paoletta
Staff
Staff
Messaggi: 3975
Iscritto il: lun 25 apr 2005, 0:00
Slackware: 14.2 - 64 bit
Desktop: fluxbox
Località: Varese

Messaggio da Paoletta »

dark0s ha scritto:E' possibile utilizzare opzioni con più di un di una lettera, del tipo s1 o s2 al posto della sola s.
Ho provato con:

while getopts :s1:s2:... OPZIONE; do
s1....
.....
.....
done

Insome s1 non si può utilizzare
a quanto ne so il comando getopt (non getopts) è basato sulla routine GNU getopt, che prende come opzioni delle singole lettere; prova a guardare il man, ma non credo che prenda più di una lettera come opzione.
guarda anche
http://www.lilik.it/~mirko/gapil/gapils ... 380002.3.2

Avatar utente
urka58
Linux 3.x
Linux 3.x
Messaggi: 543
Iscritto il: mer 7 dic 2005, 23:29

Messaggio da urka58 »

questo dovrebbe servirti, probabilmente solo in parte....

Codice: Seleziona tutto


#!/bin/sh

until [ -z "$1" ]; do 	# Finché ci sono parametri...
case $1 in
   a)
   echo "faccio una cosa tipo a"
   ;;
   b)
   echo "faccio una cosa tipo b"
   ;;
   c)
   echo "faccio una cosa tipo c"
   ;;
esac
   shift
done

Ciao


dark0s
Linux 3.x
Linux 3.x
Messaggi: 556
Iscritto il: lun 10 gen 2005, 0:00

Messaggio da dark0s »

A cosa serve il comando shift e come si usa?

Rispondi