PDA

Visualizza la versione completa : [BASH] Errore nell'esecuzione di uno script


be_ar
13-07-2011, 13:09
Salve a tutti
Ho questo esercizio:

Realizza uno script che accetta come parametro
sulla linea di comando un intero compreso tra 1
e 10 e chieda la tabellina ad esso relativa
Si leggano le risposte dell'utente e si calcoli un
punteggio di uno per ogni risposta esatta ed un
punteggio di 0 per ogni risposta sbagliata
Si concluda lo script visualizzando il punteggio
finale

che ho svolto in questo modo:


#!/bin/bash
read N
while [ "$N" -lt "1" -o "$N" -gt "10" ]
do
if [ "$N" -lt "1" -o "$N" -gt "10" ]
then
echo Inserire un numero compreso tra 1 e 10
read N
else
cont=0
for((i=0; i<=10; ++i))
do
echo $N x $i = ?
read ans
if [ "$ans" = "$(($N*$i))" ]
then
++cont
fi
done
fi
echo Il punteggio ottenuto $cont
done


Quando lo eseguo, il terminale mi restituisce questo errore:

./es_13: riga 3: [: : attesa espressione intera
E' probabilissimo che sia una stupidata, visto che sono alle primissime armi, ma son due ore che ci sbatto la testa, e non riesco a risolvere in nessun modo...

pier_IP
13-07-2011, 19:03
Scusa non sono ferratissimo su questo linguaggio (lo uso ogni tanto per velocizzarmi alcune operazioni da terminale), ma questo frammento di codice non mi convince...


while [ $N -lt 1 -o $N -gt 10 ]
do
if [ $N -lt 1 -o $N -gt 10 ]
then
.......
else
#non verra' eseguito!


Se entra nel while con la condizione n<1 or n>10 vera, scegliera' sempre il ramo if... o no?

Poi le virgolette che hai posto nelle condizioni anche non mi convincono... prova a toglierle.

Infine sulla traccia ti dice:
"accetta come parametro sulla linea di comando un intero compreso tra 1 e 10"
Bene, ma se inserisci un numero tra 1 e 10, il while non viene eseguito. La condizione e' sbagliata, sostituiscila con:


while [ $N -gt 1 -a $N -lt 10 ]
do
.....

Loading