Perché se non usi correttamente la sintassi del comando test (quello che scrivi all'interno delle parentesi [ ] )
Quei testo sono
tutti veri, perché non ci metti gli spazi.
Mi spiego, con un po' di codice:
Codice: Seleziona tutto
vaevictis@vaevictis-N56VV:~$ Z=33
vaevictis@vaevictis-N56VV:~$ echo $Z
33
Senza spazi tra gli operatori:
Codice: Seleziona tutto
vaevictis@vaevictis-N56VV:~$ if [ $Z="33" ]; then echo "YEAH"; fi
YEAH
vaevictis@vaevictis-N56VV:~$ if [ $Z="" ]; then echo "YEAH"; fi
YEAH
vaevictis@vaevictis-N56VV:~$ if [ $Z="PUPPE A PERA" ]; then echo "YEAH"; fi
YEAH
Con gli spazi tra gli operatori:
Codice: Seleziona tutto
vaevictis@vaevictis-N56VV:~$ if [ $Z = "" ]; then echo "YEAH"; fi
vaevictis@vaevictis-N56VV:~$ if [ $Z = "33" ]; then echo "YEAH"; fi
YEAH
vaevictis@vaevictis-N56VV:~$ if [ $Z = "PUPPE A PERA" ]; then echo "YEAH"; fi
vaevictis@vaevictis-N56VV:~$
In pratica, se non usi gli spazi non stai testando l'uguaglianza, ma controlli che la stringa non sia vuota
Per stringa intendo una cosa del genere:
Codice: Seleziona tutto
vaevictis@vaevictis-N56VV:~$ echo $Z="33"
33=33 #questa stringa
Detto questo, per procedure di questo tipo ti conviene usare il
costrutto case.
p.s.:
Qualche strana congiuntura tra server non mi ha fatto vedere la risposta di UbuNuovo. Pardon.