Punto informatico Network
Login Esegui login | Non sei registrato? Iscriviti ora (è gratuito!)
Username: Password:
  • Annuncio Pubblicitario

[Bash] problema con output programma

Il forum per tutti i developer. Leggere attentamente il regolamento di sezione prima di postare.

[Bash] problema con output programma

Messaggioda ilpinguino89 » lun mag 20, 2013 5:45 pm

Salve a tutti per esercitarmi sto creando un semplicissimo sistema di login.

Sono riuscito quasi in tutto tranne che nel giusto funzionamento del ciclo "while" infatti continua all'infinito.

Io vorrei che questo ciclo si interrompesse dopo tre volte che è stato tentato di "eseguire l'accesso" e sempre se l'accesso non è stato eseguito lo script dovrebbe eseguire un comando in background.

Credo di essere riuscito ad inserire un contatore che però non funziona qualcuno potrebbe suggerirmi qualcosa?

Questo è il codice:
Codice: Seleziona tutto
#! /bin/bash

pinguino="pinguino"
password="pinguino89"
stop="3"
contatore="0"

#marco1=input
#password1=input

EXIT_SUCCESS=0
#EXIT_FAILURE=1

while true [ $contatore -ne $stop ] ; do
   echo "Inserisci nome e password:"
   read pinguino1
   read password1
   if [[ "$pinguino1" = "$pinguino" ]] && [[ "$password1" = "$password" ]]; then
      break
   else
      echo "Input errato"
   fi
let "contatore=$contatore+1"
done
Avatar utente
ilpinguino89
Neo Iscritto
Neo Iscritto
 
Messaggi: 9
Iscritto il: ven nov 04, 2011 8:35 pm

Re: [Bash] problema con output programma

Messaggioda gigicookie » mar mag 21, 2013 5:36 pm

Prova cosi per il while:
Codice: Seleziona tutto
while [ contatore <= 3 ]; do
read pinguino1
read password1
if [ pinguino1 == pinguino ]; then
if [ password1 == password ]; then
break
else
echo "Password errata"
fi
else
echo "Nome utente errato"
fi
http://www.MegaLab.it/forum/viewtopic.php?f=3&t=52165
Galaxy next turbo+Rom stock 2.3.6+Cor plenus v2.1.7 + S2SD
Nexus 7+Recovery TWRP+Rom stock+MultiROM+Ubuntu 13.04 raring ringtail+Plasma active
Avatar utente
gigicookie
Senior Member
Senior Member
 
Messaggi: 485
Iscritto il: ven apr 06, 2012 6:40 pm

Re: [Bash] problema con output programma

Messaggioda M@ttia » mar mag 21, 2013 6:42 pm

gigicookie ha scritto:Prova così...

Uhm, però a ogni tentativo errato devi incrementarlo il contatore [:)]

ilpinguino89 ha scritto:Credo di essere riuscito ad inserire un contatore che però non funziona qualcuno potrebbe suggerirmi qualcosa?


  • = assegna un valore, == li confronta fra loro, quindi a te serve testare if [[ "$pinguino1" == "$pinguino" ]], ecc.
  • Non sono per nulla esperto di bash e quindi non voglio confondere con C++ e simili, ma per quale motivo il tuo ciclo while inizia con un TRUE e poi una condizione? Non ti basta fare, come suggerito, un
    while [ $contatore < $stop ] ; do ?
  • Così com'è il codice non riesci comunque a distinguere un login effettuato da un fallimento: ti serve una flag (tipo "accessoeffettuato=true") nell'IF.
[^]
</IE><FIREFOX>
Avatar utente
M@ttia
Moderatore
Moderatore
 
Messaggi: 8363
Iscritto il: lun giu 09, 2003 2:18 pm
Località: Ticino - Estero


Re: [Bash] problema con output programma

Messaggioda gigicookie » mar mag 21, 2013 8:25 pm

M@ttia ha scritto:
gigicookie ha scritto:Prova così...

Uhm, però a ogni tentativo errato devi incrementarlo il contatore [:)]


[acc2] Ops. Me n' ero dimenticato. Basta aggiungere un
Codice: Seleziona tutto
contatore=$(($contatore + 1))
nell' else
Quindi si ottiene:
Codice: Seleziona tutto
while [ $contatore <= 3 ]; do
if [ $pinguino1 == $pinguino]; then
if [ $password1 == $password]; then
break
else
contatore=$(($contatore + 1))
echo "Password errata"
fi
else
contatore=$(($contatore + 1))
echo "User errato"
fi

M@ttia ha scritto:a te serve testare if [[ "$pinguino1" == "$pinguino" ]]

La sintassi di if in bash è if [ condizione ], quindi le doppie parentesi quadre non sono necessarie.
M@ttia ha scritto:Così com'è il codice non riesci comunque a distinguere un login effettuato da un fallimento: ti serve una flag (tipo "accessoeffettuato=true") nell'IF

Non è detto, poichè si potrebbe semplicemente controllare se il contatore è a 1 alla fine del codice, infatti se si sbaglia il contatore deve per forza avere un valore superiore
M@ttia ha scritto:inizia con un TRUE e poi una condizione?

while se non erro accetta le stesse condizioni accettate da if (quindi ad es l' opzione "-e" che indica se il file è presente) e quindi il true non credo che vada messo.
http://www.MegaLab.it/forum/viewtopic.php?f=3&t=52165
Galaxy next turbo+Rom stock 2.3.6+Cor plenus v2.1.7 + S2SD
Nexus 7+Recovery TWRP+Rom stock+MultiROM+Ubuntu 13.04 raring ringtail+Plasma active
Avatar utente
gigicookie
Senior Member
Senior Member
 
Messaggi: 485
Iscritto il: ven apr 06, 2012 6:40 pm

Re: [Bash] problema con output programma

Messaggioda ilpinguino89 » mer mag 22, 2013 1:55 pm

Ringrazio tutti per le numerose risposte.

questo è il codice modificato
Codice: Seleziona tutto
#! /bin/bash

marco="pinguino" #utente
password="pinguino98" #password

contatore=0
stop=3

#marco1=input
#password1=input

EXIT_SUCCESS=0
#EXIT_FAILURE=1

while [ $contatore != "$stop" ]; do
   echo "Inserisci nome e password:"
   read marco1
   read password1
   if [[ "$marco1" = "$marco" ]] && [[ "$password1" = "$password" ]]; then
      break
   else
      echo "Input errato"
   fi
         let contatore=$contatore+1
done

if [ $contatore = "$stop" ] ; then #se non si accede cosa fare:
   echo "time out accesso" #scrivere questo
   echo `ls`      #eseguire questo comando
      else #se si accede invence
         echo "accesso effettuato" #scrivere questo
fi

exit $EXIT_SUCCESS


Io vorrei dividere l' "if" in due parti una per l'utente e una per la password ma tutti i miei tentativi sono stati inutili; avete qualche suggerimento?
Avatar utente
ilpinguino89
Neo Iscritto
Neo Iscritto
 
Messaggi: 9
Iscritto il: ven nov 04, 2011 8:35 pm

Re: R: [Bash] problema con output programma

Messaggioda gigicookie » mer mag 22, 2013 3:13 pm

Continuo a non capire perche ci sono le doppie quadre, comunque basta mettere gli if uno sotto l' altro:
Codice: Seleziona tutto
if [$pinguino1 == $pinguino];  then
if [$password1 == $password]; then
# Se è giusto
else
# Se è sbagliata
fi
# Codice solito
else
# Se è errato
fi


Inviato dal mio Nexus 7 con Tapatalk 2
http://www.MegaLab.it/forum/viewtopic.php?f=3&t=52165
Galaxy next turbo+Rom stock 2.3.6+Cor plenus v2.1.7 + S2SD
Nexus 7+Recovery TWRP+Rom stock+MultiROM+Ubuntu 13.04 raring ringtail+Plasma active
Avatar utente
gigicookie
Senior Member
Senior Member
 
Messaggi: 485
Iscritto il: ven apr 06, 2012 6:40 pm

Re: [Bash] problema con output programma

Messaggioda ilpinguino89 » mer mag 22, 2013 5:49 pm

cosa intendi per "codice solito"?
Avatar utente
ilpinguino89
Neo Iscritto
Neo Iscritto
 
Messaggi: 9
Iscritto il: ven nov 04, 2011 8:35 pm

Re: [Bash] problema con output programma

Messaggioda gigicookie » ven mag 24, 2013 2:58 pm

Nulla, errore mio. Ma qui:
Codice: Seleziona tutto
echo `ls`      #eseguire questo comando

Per eseguire il comando devi scriverlo non fare echo comando
http://www.MegaLab.it/forum/viewtopic.php?f=3&t=52165
Galaxy next turbo+Rom stock 2.3.6+Cor plenus v2.1.7 + S2SD
Nexus 7+Recovery TWRP+Rom stock+MultiROM+Ubuntu 13.04 raring ringtail+Plasma active
Avatar utente
gigicookie
Senior Member
Senior Member
 
Messaggi: 485
Iscritto il: ven apr 06, 2012 6:40 pm

Re: [Bash] problema con output programma

Messaggioda ilpinguino89 » ven mag 24, 2013 3:58 pm

Mi sono sbagliato, ho già corretto
Avatar utente
ilpinguino89
Neo Iscritto
Neo Iscritto
 
Messaggi: 9
Iscritto il: ven nov 04, 2011 8:35 pm

Re: [Bash] problema con output programma

Messaggioda gigicookie » ven mag 24, 2013 4:24 pm

Ma le doppie quadre perché le metti?
http://www.MegaLab.it/forum/viewtopic.php?f=3&t=52165
Galaxy next turbo+Rom stock 2.3.6+Cor plenus v2.1.7 + S2SD
Nexus 7+Recovery TWRP+Rom stock+MultiROM+Ubuntu 13.04 raring ringtail+Plasma active
Avatar utente
gigicookie
Senior Member
Senior Member
 
Messaggi: 485
Iscritto il: ven apr 06, 2012 6:40 pm


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 2 ospiti

Powered by phpBB © 2002, 2005, 2007, 2008 phpBB Group
Traduzione Italiana phpBB.it

megalab.it: testata telematica quotidiana registrata al Tribunale di Cosenza n. 22/09 del 13.08.2009, editore Master New Media S.r.l.; © Copyright 2008 Master New Media S.r.l. a socio unico - P.I. 02947530784. GRUPPO EDIZIONI MASTER Spa Tutti i diritti sono riservati. Per la pubblicità: Master Advertising