[Risolto][Bash]Ciclo If then!

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
9!Martin
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1669
Iscrizione: martedì 17 novembre 2009, 14:51
Desktop: Lxde Classico
Distribuzione: Ubuntu Trusty 32bit

[Risolto][Bash]Ciclo If then!

Messaggio da 9!Martin »

Salve a tutti

Sto scrivendo un piccolo script bash.

Devo fare un ciclo if then per selezionare una variabile, tramite un comando Awk.
Se $Z e uguale a 33, 36. etc, gli viene assegnata la stringa corrispondente.

Codice: Seleziona tutto

Z=$(awk -F'[=&]' '{print $2}' Link1.txt);
if [ $Z="33" ]; then Var1="Ciao!"; fi
if  [ $Z="36" ]; then Var1="Salve!";fi
if [ $Z="42" ]; then Var1="Salute!";fi
if [ $Z="434" ]; then Var1="Come stà?";fi
if [ $Z="435" ]; then Var1="Bene!";fi
if [ $Z="1025" ]; then Var1="Addio!";fi
Mà perchè, Var1, assume sempre l'ultima stringa? "Addio"

Gràzie

Ciao :)
Ultima modifica di 9!Martin il domenica 28 dicembre 2014, 17:04, modificato 1 volta in totale.
Avatar utente
UbuNuovo
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4433
Iscrizione: sabato 12 dicembre 2009, 20:58
Desktop: Mate
Distribuzione: Ubuntu Mate 22.04.1 LTS
Sesso: Maschile
Contatti:

Re: [Bash]Ciclo If then!

Messaggio da UbuNuovo »

Perché devi separare l'uguale con gli spazi, altrimenti viene considerata un'assegnazione (anche se le variabili non possono iniziare con "$") l'assegnazione risulta vera quindi qualsiasi if risulta vero, sovrascrivendo il precedente. (credo)
Prova a scrivere con la sintassi:

Codice: Seleziona tutto

if [ "$Z" = "33" ]; then Var1="Ciao!"; fi
...
e fai sapere.
Poi sarebbe meglio usare 'elif' con 'else' finale per valori non accettabili.
Salva l'Ucraina! 🇺🇦
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [Bash]Ciclo If then!

Messaggio da vaeVictis »

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.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
9!Martin
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1669
Iscrizione: martedì 17 novembre 2009, 14:51
Desktop: Lxde Classico
Distribuzione: Ubuntu Trusty 32bit

Re: [Bash]Ciclo If then!

Messaggio da 9!Martin »

Si infatti, ho risolto con case!
Stavo cercando in rete! Non sono esperto di bash!

Codice: Seleziona tutto

case $Z in
    33)
        Var1="Auguri!"
        ;;
    36)
        Var1="Buongiórno!"
        ;;
    12)
        Var1="Ciao!"
        
        ;;
    
    43) 
         Var1="Salve!"
    ;;
    
    45) 
         Var1="Salute!"
         ;;
         
    47)  
         Var1="Addio!"
         ;;     

esac

Ciao :)
Avatar utente
vaeVictis
Imperturbabile Insigne
Imperturbabile Insigne
Messaggi: 4703
Iscrizione: venerdì 27 luglio 2012, 17:58
Desktop: Gnome
Distribuzione: Ubuntu 20.04 64bit

Re: [RISOLTO][Bash]Ciclo If then!

Messaggio da vaeVictis »

Metti anche il comportamente per il caso di default :)
Ciao.
Pirates arrrrrrrrrrr awesome!!!
«I fear not the man who has practiced 10000 kicks once,
but I fear the man who has practiced one kick 10000 times.»
9!Martin
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1669
Iscrizione: martedì 17 novembre 2009, 14:51
Desktop: Lxde Classico
Distribuzione: Ubuntu Trusty 32bit

Re: [RISOLTO][Bash]Ciclo If then!

Messaggio da 9!Martin »

Questo:

Codice: Seleziona tutto


*)  
      echo "NOME NON TROVATO!NON E IN LISTA! STOP!" 

:D :D

Ciao :)
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 8 ospiti