Quando eseguo i seguente codice
#!/bin/bash
domandasessantaquattro () {
echo -e '\E[1;33;44m'"Mint è a 64 bit?"; tput sgr0
echo -e '\E[1;33;44m'"Rispondi con s oppure n"; tput sgr0
read sessantaquattro
controllosessantaquattro
}
# Funzione controllosessantaquattro - Controlla che la variabile
sessantaquattro sia s oppure n
controllosessantaquattro () {
if [ $sessantaquattro == 's' ] || [ $sessantaquattro == 'n' ] ; then
echo ""
else
echo ""
echo -e '\E[1;33;41m'"Parametro inserito NON corretto"; tput sgr0
domandasessantaquattro
fi
}
domandasessantaquattro # Chiama la funzione domandasessantaquattro
if [ $sessantaquattro == 's' ] ; then
echo "64 bit"
else
fi
echo "32 bit"
mi da il seguente errore ma non trovo il problema
./Prova.sh: riga 27: errore di sintassi vicino al token non atteso "fi"
./Prova.sh: riga 27: `fi'
Ciao e grazie
andrea
attachment.htm (3.04 KB)
Prova a levare la keyword else (tanto non fa nulla)
Luca
attachment.htm (3.6 KB)
Grazie Luca,
il tuo suggerimento funziona.
Ciao ciao
attachment.htm (7.08 KB)
Andrea Congiu wrote:
./Prova.sh: riga 27: errore di sintassi vicino al token non atteso "fi"
./Prova.sh: riga 27: `fi'
Alla shell non piace che il corpo del `else` branch sia vuoto:
if [ $sessantaquattro == 's' ] ; then
echo "64 bit"
else
fi
Basta rimuovere il commando `else`, oppure inserire un commando tra else
e fi.
Alcune osservazioni non correlate alla tua domanda...
if \[ $sessantaquattro == 's' \] || \[ $sessantaquattro == 'n' \] ; then
questo si può scrivere usando una singola invocazione al comando `test`
(alias `[`) così:
if \[ $sessantaquattro == 's' \-o $sessantaquattro == 'n' \] ; then
Questo è leggermente più performante del comando con due invocazione a
`test`, ma se tu decidi che la prima variante è più leggibile, la tua
versione è certamente corretta.
E in generale è buona prassi usare virgolette quando usi variabili in
uno script:
if \[ "$sessantaquattro" == 's' \-o "$sessantaquattro" == 'n' \] ; then
C'è chi usa l'estensione bash [[ al posto del comando posix [, ma io
tendo ad evitare questa estensione, perché non funziona in tutte le
shell, per esempio la dash.
HTH,
Thomas
Grazie per gli interessanti spunti.
Ciao ciao
attachment.htm (4.08 KB)