PDA

Visualizza la versione completa : [BASH] Problema nel case


Manugal
20-10-2006, 15:38
Ciao a tutti!! :)

Ho un problema con uno script che sto implementando che fa alcune operazioni matematiche. Come ultima condizione del case ho messo la seguente istruzione:

*[!/\*+-%mcdmedia]*) echo "Errore"
Cioè se l'argomento passato è diverso da / * + - % mcd o media allora stampa "Errore". Il problema è che quando lo vado a lanciare e faccio per esempio 5 * 3 mi da errore. Cosa ho sbagliato in questa RE? Forse ho le idee un po' confuse :confused:

andbin
20-10-2006, 16:43
Originariamente inviato da Manugal
Ciao a tutti!! :)

Ho un problema con uno script che sto implementando che fa alcune operazioni matematiche. Come ultima condizione del case ho messo la seguente istruzione:

*[!/\*+-%mcdmedia]*) echo "Errore"
Cioè se l'argomento passato è diverso da / * + - % mcd o media allora stampa "Errore". Il problema è che quando lo vado a lanciare e faccio per esempio 5 * 3 mi da errore. Cosa ho sbagliato in questa RE? Forse ho le idee un po' confuse :confused: Occhio che la stringa di corrispondenza indicata nel case non supporta le espressioni regolari!!! Supporta al massimo * e ? e la 'or' |. Praticamente come per il match dei file nella shell. Inoltre (ed è questo che ti servirebbe), il case *) è il default se non viene scelto un altro case.

Quindi:

case $arg in
....

mcd)
....
;;
media)
....
;;
*)
echo "Errore";
;;
esac

Manugal
20-10-2006, 16:51
Ah quindi nel case basta semplicemente che metto *) e quello è il caso di default se non vengono soddisfatti gli altri casi? Fico :zizi:. Allora perché il mio prof in questo esempio di case ha fatto così?



#!/bin/bash

echo “Your choice?”
read reply

case "$reply" in
"1") echo “administrator”
;;
“2”) echo “student”
;;
“3”) echo “teacher”
;;
*[!1- 3]*) echo "Usage: `basename $0` (=1,2,3)";
exit 1
;;
esac

exit 0


Come vedi ha usato *[!1- 3]*). Quindi sarebbe stato uguale se avesse usato solo *) o qui il caso è differente?

Grazie. :)

andbin
20-10-2006, 17:00
Originariamente inviato da Manugal
Ah quindi nel case basta semplicemente che metto *) e quello è il caso di default se non vengono soddisfatti gli altri casi? Fico :zizi:. Allora perché il mio prof in questo esempio di case ha fatto così?In quello script sarebbe superfluo il case *[!1- 3]*) (ammesso che la sintassi sia corretta, mi sembrano strani quei * ma ora non ho modo di verificare su una linux box!).
Basta mettere *) e catturi tutto.

Loading