Pagina 1 di 2

scrivere un comando con le sue opzioni con sh

Inviato: gio 19 gen 2006, 14:46
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

Inviato: gio 19 gen 2006, 14:57
da gallows

Inviato: ven 20 gen 2006, 9:53
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/

Inviato: sab 21 gen 2006, 18:43
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

Inviato: sab 21 gen 2006, 19:25
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 "????"

Inviato: sab 21 gen 2006, 19:31
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.

Inviato: sab 21 gen 2006, 19:34
da gallows
Forse se posti l'abbozzo dello script (commentato) è meglio.

Inviato: sab 21 gen 2006, 19:50
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.

:?

Inviato: sab 21 gen 2006, 20:03
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=
?

Inviato: sab 21 gen 2006, 20:05
da dark0s
No perchè non c'è solo da rimuovere dei settaggi. Stog ad assì matt...

PS scusatemi l'espressione pugliese

Inviato: sab 21 gen 2006, 20:14
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


Inviato: mar 24 gen 2006, 0:31
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

Inviato: mar 24 gen 2006, 11:29
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

Inviato: gio 26 gen 2006, 0:00
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


Inviato: gio 26 gen 2006, 13:24
da dark0s
A cosa serve il comando shift e come si usa?