errore di sintassi vicino al token non atteso "fi"

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)