Newsgroup: it.comp.os.linux.iniziare
Titolo: problemi con la sintassi di case [MDK9.2]

Buongiorno a tutti.
Il mio problema è molto semplice ma non riesco a risolverlo eriguarda
la sintassi del costrutto "case".
L'errore è lo stesso usando sh e usando bash.
Io ho scritto:
  read $SCELTA
  case $SCELTA in
        1)echo "ho scelto 1";;
        2)echo "ho scelto 2";;
        *)echo "ALTRO";;
  esac
qualsiasi cosa io digiti mi appare a video ALTRO (anche se digito 1 o
2!!!!).
Ho provato anche a scrivere a "1" anzichè 1 ma non è cambioato nulla.
Inoltre (non so se questo possa essere d'aiuto) il costrutto while
funziona solo se scrivo
 while test eccetera  (senza la parola test non funziona)
Qualcuno è in grado di aiutarmi?
ciao
andrea

castle ha scritto:

Ciao,
Non sono un esperto di programmazione di Shell, ma tenterò ugualmente di 
aiutarti...chissà che ce la facciamo ;)
Nel programmino di esempio non ci sono errori grammaticali, quindi 
l'errore deve essere per forza logico. Per poterlo scoprire dovresti 
mettere il codice di tutto il programma (che spero sia piccolo) sul 
newsgroup.
Alla prossima.
Have a lot toi fun,
Matteo

 andrea
bye
chris

 2!!!!).
Nemmeno io sono un grande "scriptista", ma ho testato il tuo script
ottenendo un errore diverso ma più "giusto" del tuo... questo è il mio
risultato:
[root@mail mloi]# ./test 2
./test: line 3: read: `2': not a valid identifier
ho scelto 2
[root@mail mloi]# ./test 1
./test: line 3: read: `1': not a valid identifier
ho scelto 1
Questo invece è il codice contenuto nel mio ./test:
[root@mail mloi]# cat test
#!/bin/sh
scelta=$1
read $scelta
 case $scelta in
        1) echo "ho scelto 1";;
        2) echo "ho scelto 2";;
        *) echo "ALTRO";;
 esac
Magari ti può essere utile... L'errore che ho è dovuto al comando "read" che
va a leggere un file che dovrebbe chiamarsi "1" o "2" che non esiste... se
levo la riga con "read $scelta" lo script, e in particolare il case,
funziona.
Max

Ciao,
Ecco la soluzione completa del nostro piccolo problema.
Mi sembrava che non ci fossero errori grammaticali ed invece chris ha 
giustamente fatto notare che lo sbaglio non è nel case bensì nella terza 
riga: read $scelta
	****************************
	*	PROGRAMMA CORRETTO *
	****************************
#!/bin/sh
scelta=$1
read scelta


   esac
Sarà... Ma facendo un "copia-incolla" su un nuovo script, il risultato che
ho ottenuto con questo script "corretto" è questo:
[root@mail mloi]# ./test2 1
ALTRO
[root@mail mloi]# ./test2 2
ALTRO
[root@mail mloi]# ./test2 3
ALTRO
A me non sembra molto corretto...
Max

Un bel dì messer castle in tal guisa il suo pensier espresse: 

Ecco lo script funzionante :)
#!/bin/bash
scelta=$1
case $scelta in
        1) echo "ho scelto 1";;
        2) echo "ho scelto 2";;
        *) echo "ALTRO";;
esac
exit 0
-- 
Perche' la vita e' un brivido che vola via, e' tutto un equilibrio sopra la
follia
                                                 Vasco Rossi.
Registered Linux User #337546 powered by Fedora Core 2

Ragazzi spero che vi raccappezziate.
Come già ho detto lo script funzionante è:
**********************************************
#!/bin/sh
scelta=$1
read scelta
  case $scelta in
         1) echo "ho scelto 1";;
         2) echo "ho scelto 2";;
         *) echo "ALTRO";;
  esac
**********************************************
Per farlo funzionare è necessario creare un file di nome test.sh ed 
incollare le righe suddette. Dopodicchè è necessario dare al file i 
permessi di esecuzione col comando
	chmod 755 test.sh
ed infine lanciare lo script col comando
	./test.sh
Premere 1, 2 o qualsiasi altro tasto e visualizzare l'output.
Come fate a non trovarvi, ma sopratutto a dare per corrette versioni 
errate per me è un mistero.
Matteo

Un bel dì messer Matteo in tal guisa il suo pensier espresse: 

Non per fare il sapientone ma se esegui lo script come dici te
l'assegnazione scelta=$1 e' totalmente inutile in quanto tu assegni alla
varibile il primo argomento passato allo script (e tu non gliene passi di
argomenti per tua stessa ammissione), per poi sovrascrivere il contenuto di
quella variabile con una read, a questo punto o togli la prima riga oppure
togli la read e sostituisci $1 a $scelta nel case!
Senza alcune intenzione di flame ovviamente ;)
-- 
Windows XP dispone di tecnologie e funzionalita' molto sofisticate e
compatibili che non ne conoscete nemmeno l'esistenza.
                                           Anonimo sul forum di PI


 A me non sembra molto corretto...
invece si', visto che "invio" e' diverso da 1 e 2.
le mie modifiche.
e gia' che stai, prova anche 
# ./test2 *INVIO* 1 *INVIO*
-- 
§                  ZeD                  §
§              05/08/2004               §
§ Dedicaz. Basilica S. Maria-S. Erminio §
§  Now listening: 07 - Rain must fall   §

Cybermax ha scritto:

Avevo semplicemente corretto la terza riga dello script iniziale senza 
nessun tipo di ottmizzazione...cmq l'importante è che siamo tutti 
d'accordo ora.

 # ./test2 *INVIO* 1 *INVIO*
Ommerda... a parte il fatto che non ho mai capito a cosa possa mai servire
il comando "read" e non ho idea del perchč della sua esistenza e ovviamente
della sua funzione (un po' come le zanzare...), effettivamente cosě funziona
tutto ?!?!? Riuscissi a carpirne il motivo, avrei imparato una cosa nuova
anche oggi =)
Max

Vi ringrazio molto.
PerÃ² non ho capito qual' Ã¨ il problema della READ.
Me lo potreste spiegare?
Io dovrei far scegliere all'utente e credo di poterlo fare scrivendo: 
read $scelta
ciao
Andrea

 read $scelta
la domanda e': QUANDO vuoi far scegliere all' utente?
vuoi far scegliere quando chiami lo script? o durante il running stesso?
cioe' vuoi:
$ ./nomescript 1
$ hai scelto 1
o vuoi:
$ ./nomescript
$ 1
$ hai scelto 1
nel primo caso, la read e' inutile. nel secondo e' inutile l' assegnamento
SCELTA=$1
se vuoi dare all' utente ENTRAMBE le possibilita', ti ho gia' dato una
possibile soluzione.
-- 
§                               ZeD                                §
§                            06/08/2004                            §
§                   Trasfigurazione del Signore                    §
§ Now listening: The Fugees - The hues corporation - Rock the boat §

Ringrazio tutti, ora funziona perfettamente. 
ciao
